Olá, por que ao executar este comando:
System.out.println(214.0000000001+1.0000000001);
O resultado é esse:
215.00000000019998
Ao invés do resultado correto:
215.0000000002
???
Olá, por que ao executar este comando:
System.out.println(214.0000000001+1.0000000001);
O resultado é esse:
215.00000000019998
Ao invés do resultado correto:
215.0000000002
???
Seguinte… descobri que tenho que usar BigDecimal…
O problema e que agora usando o BigDecimal dessa forma
BigDecimal bd1=new BigDecimal("214.0000000001");
BigDecimal bd2=new BigDecimal("1.0000000001");
bd1.add(bd2);
Ele está retornando o valor 0 !
Como resolvo isso?
Aqui funcionou perfeitamente com BigDecimal:
[code]BigDecimal bd1=new BigDecimal(“214.0000000001”);
BigDecimal bd2=new BigDecimal(“1.0000000001”);
BigDecimal retorno = bd1.add(bd2);
System.out.println( retorno );
// output: 215.0000000002[/code]
Acho que fiz alguma nhaca antes, testei agora e funcionou…
enfim, pra quem tiver o mesmo problema, use BigDecimal, nesse link tem a explicação do porque:
Para entender pq o Java calcula errado:
Já vi este mesmo problema em um programa em Clipper. E pode ocorrer em qualquer linguagem quando são feitas operações convertendo o número em binário, pela razão explicada pelo Vini no link que ele colocou.
Veja o exemplo abaixo. Não parece que o programa deveria imprimir ok, igual.?
public class Erro{
public static void main(String args[]){
if(0.3 + 0.6 == 0.9){
System.out.println("ok, igual.");
}else{
System.out.println("estranho, diferente.");
}
}
}