| Autor |
Mensagem |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/09/2008 12:41:20
|
clovandi
Java Baby
Membro desde: 30/09/2008 12:32:55
Mensagens: 2
Offline
|
Gostaria de entender melhor porque acontece o que sugere o código abaixo:
double X = 0 + 2 + 2.69;//4,6899999999999995
e em outros casos
double X = 0 + 2 + 2.51;//4,51
Afinal, ele não faz a conta e pronto????
Obrigado....
|
|
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/09/2008 13:11:14
|
SrFabio
EJB = JavaBean?
Membro desde: 18/02/2007 00:00:00
Mensagens: 236
Offline
|
Esses erros de precisão devem-se ao facto de estares a fazer uma operação com dois tipos de dados diferentes, contudo não se deve só a isso, trata-se também de falta de precisão por parte da JVM.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/09/2008 14:09:37
|
marcossousa
The EJB says "Hello World!"
Membro desde: 14/01/2004 00:00:00
Mensagens: 1833
Localização: Patos de Minas - MG
Offline
|
Olá,
SrFabio wrote:Esses erros de precisão devem-se ao facto de estares a fazer uma operação com dois tipos de dados diferentes, contudo não se deve só a isso, trata-se também de falta de precisão por parte da JVM.
complementando veja este tópico http://www.portaljava.com/forum/posts/list/45087.page#165812, BigDecimal é a maneira mais segura de realizar estas operações.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 01/10/2008 00:25:36
|
Juliano Carniel
Coordenador
Membro desde: 25/09/2003 00:00:00
Mensagens: 1894
Localização: Campinas - SP
Offline
|
É um problema comum em sistemas binários. E como todos* os sistemas que conhecemos, e temos hoje são binários, então é um problema bem comum.
Existem pela internet uns papers bem interessantes sobre representação decimal em sistemas binários, e coisas relacionadas.
Abraços.
|
Juliano D. Carniel
Por uma vida Justa e uma morte Honrada!
Nonsenses... it´s life!
 |
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 02/10/2008 08:55:03
|
ninarm
Java Baby
Membro desde: 24/09/2008 09:55:40
Mensagens: 4
Offline
|
Clovandi,
O negócio é usar bigdecimal mesmo:
BigDecimal x = new BigDecimal(0+2+2.69,MathContext.DECIMAL32).setScale(2);//4,69
System.out.println(x);
out:
4.69
Fonte: http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html
[]'s
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 05/10/2008 16:15:29
|
clovandi
Java Baby
Membro desde: 30/09/2008 12:32:55
Mensagens: 2
Offline
|
Valeu pessoal pela explicação, andei pesquisando e a coisa é bastante complexa mesmo.... na dúvida vou usar o bigDecimal mesmo
Obrigado
Clovandi.
|
|
|
 |
|
|