Valor Numérico errado

8 respostas
Fabricio_Cozer_Marti

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("[telefone removido]");
       System.out.println(f.doubleValue());


       Double d = new Double("[telefone removido]");
       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?

8 Respostas

jgbt

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

Fabricio_Cozer_Marti

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

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

Fabricio_Cozer_Marti

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:

[telefone removido] 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

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

Fabricio_Cozer_Marti

BigDecimal?

Como eu faria ?

Tem algum exemplo?

Valeu brlima!

brlima

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

T

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

Criado 26 de janeiro de 2005
Ultima resposta 26 de jan. de 2005
Respostas 8
Participantes 5