Duvida sobre precisão

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…

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.

Olá,

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.

:wink:

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

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

Valeu pessoal pela explicação, andei pesquisando e a coisa é bastante complexa mesmo… na dúvida vou usar o bigDecimal mesmo

Obrigado

Clovandi.
:grin: