Bom dia pessoas,
estou passando pela seguinte situação:
preciso calcular um valor , só que na hora de instanciar
um Float, o retorno está me trazendo um valor que não é o correto.
Ex.:
Float f = new Float("60000000000");
System.out.println(f.doubleValue());
Double d = new Double("60000000000");
System.out.println(d);
==========================
Saída:
6.0000002048E10
6.0E10
Só que não posso mudar o atributo pra Double,
será que existe uma forma de o resultado sair sem esse “lixo” numérico?
jgbt
Janeiro 26, 2005, 10:12am
#2
vc pode formatar o numero.
de uma pesquisada no forum que vc vai achar exemplos.
no javaalmac tmb tem exemplos de formatação de numeros.
[]'s
mas o que ocorre não é isso…
eu já formato , mas ele ainda continua saindo com o valor contendo
o lixo de aproximação… isso no Float, mas não posso mudar pra Double.
alguém sabe??
Akila
Janeiro 26, 2005, 11:30am
#4
Caro colega que não que lixo no float.
Testa fazer o seguinte teste… no lugar onde vc instancia o seu float, modifique da seguinte forma:
ex.:
DE: new Float(6000);
PARA: new Float(6000F);
Caro colega Akila,
independe de f , o que aconteceu foi que o valor é grande demais
para um Float, que suporta no máximo 32bits…
Então vou ter que mudar tudo pra Double, que suporta 64bits
Valor:
60000000000 Decimal
110111111000010001110101100000000000 Binario (36 bits > limite )
Aí dá esse erro!
De qq forma valeu pela ajuda!
O engraçado é que o JAVA tira os bits do seu número, sem avisar nada,
sem lançar nenhum runtimeException… :x
brlima
Janeiro 26, 2005, 12:38pm
#6
Tenta usar o BigDecimal pra esses calculos se precisar de muita precisão.
brlima
Janeiro 26, 2005, 12:54pm
#8
thingol
Janeiro 26, 2005, 2:00pm
#9
Dentro da medida do possível, evite usar Float ou float. A economia de bytes em 95% das vezes não compensa os problemas de precisão (float tem apenas 4 bytes = 32 bits e sua precisão é de muitos poucos bits, se não me engano apenas 23). As contas não são feitas mais rapidamente - o hardware dos PCs comuns normalmente faz conta com 80 bits internamente.
Normalmente use double, long, BigDecimal etc (dependendo do que você está fazendo).