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