Valor Numérico errado...  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Fabricio Cozer Martins
GUJ Ranger
[Avatar]

Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline

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?



Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4
[MSN] [ICQ]
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

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

João Bier
Desenvolvedor Java
[Email]
Fabricio Cozer Martins
GUJ Ranger
[Avatar]

Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline

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

Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4
[MSN] [ICQ]
Akila
JavaBaby
[Avatar]

Membro desde: 24/05/2003 20:34:00
Mensagens: 76
Localização: Belo Horizonte
Offline

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);
[MSN] [ICQ]
Fabricio Cozer Martins
GUJ Ranger
[Avatar]

Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline

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

Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4
[MSN] [ICQ]
brlima
Moderador
[Avatar]

Membro desde: 12/05/2003 14:03:38
Mensagens: 1537
Localização: São Paulo - SP
Offline

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

Bruno R. Lima
-------------------------------------------
flickr :: twitter
[MSN]
Fabricio Cozer Martins
GUJ Ranger
[Avatar]

Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline

BigDecimal?

Como eu faria ?

Tem algum exemplo?

Valeu brlima!

Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4
[MSN] [ICQ]
brlima
Moderador
[Avatar]

Membro desde: 12/05/2003 14:03:38
Mensagens: 1537
Localização: São Paulo - SP
Offline

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

Bruno R. Lima
-------------------------------------------
flickr :: twitter
[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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).
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team