Valor Numérico errado

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?

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??

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

Tenta usar o BigDecimal pra esses calculos se precisar de muita precisão.

BigDecimal?

Como eu faria ?

Tem algum exemplo?

Valeu brlima!

http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html

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).