Validar um número, é decimal ou não!?!

4 respostas
arm.jr

Eu queria validar um número, para saber se e inteiro ou decimal, tipo nesse exemplo abaixo com o valor da variável d.
Se essa divisão der um numero inteiro ele para (break), senão ele continua, incrementando o valor da variável Naux, ate encontrar um número que seja inteiro.

Alguem pode me ajudar nisso dai?

[color=blue]int d = 0;

while(true)

{
d = (1 + z*Naux) / n;

System.out.println(d);

if (d )

{

result = d;

Naux = 0;

break;

}

else Naux++;

}[/color]

4 Respostas

T

Quando você faz contas com ponto flutuante, não deve se esquecer de que um resultado nunca é exato. Mesmo que eu lhe dissesse que você poderia fazer algo como:

Math.rint (d) == d

para dizer que um número é inteiro, isso não seria adequado - pode ser que alguma vez o seu algoritmo entrasse em loop.

O correto é chegar a uma aproximação adequada, por exemplo:

Math.abs (Math.rint (d) - d) <= 1E-10

se quiser que o seu número seja inteiro, a menos de um erro de 10 elevado a -10.

micheljuca

vi que existe uma forma de pegar a parte inteira do decimal, mas nao existe uma forma de pegar o que vem depois da virgula/ponto. Assim seria so ver se eh zero.

David

micheljuca:
vi que existe uma forma de pegar a parte inteira do decimal, mas nao existe uma forma de pegar o que vem depois da virgula/ponto. Assim seria so ver se eh zero.
Existe, é só diminuir o decimal do inteiro… 20.00001 - 20 = 0.00001, que é diferente de 0.

T

Até aí tudo bem, mas o problema original era calcular um determinado número via aproximações sucessivas (pelo que imagino).
Via aproximações sucessivas, pode ser que você nunca chegue ao tal número inteiro - não é que você tenha algo do tipo “0, 0.9, 0.99, 0.9999” e não consiga chegar a 1, já que a precisão é finita.
O problema é que as contas podem ficar paradas em um determinado ponto - como “0.9999, 0.9999, 0.9999” etc. e nunca chegar ao tal número inteiro.
Por isso, é melhor estabelecer uma determinada tolerância e pegar o número mais próximo possível, mas não exatamente inteiro, porque pode ser que você tenha um programa em loop.

Criado 9 de maio de 2006
Ultima resposta 9 de mai. de 2006
Respostas 4
Participantes 4