Java calculando errado o valor de 2 doubles?

6 respostas
mateusviccari

Olá, por que ao executar este comando:

System.out.println(214.[telefone removido]+1.[telefone removido]);

O resultado é esse:
215.00000000019998

Ao invés do resultado correto:
215.[telefone removido]

???

6 Respostas

mateusviccari

Seguinte… descobri que tenho que usar BigDecimal…
O problema e que agora usando o BigDecimal dessa forma

BigDecimal bd1=new BigDecimal("214.[telefone removido]");
        BigDecimal bd2=new BigDecimal("1.[telefone removido]");
        bd1.add(bd2);

Ele está retornando o valor 0 !
Como resolvo isso?

daveiga

Aqui funcionou perfeitamente com BigDecimal:

​BigDecimal bd1=new BigDecimal("214.[telefone removido]");  
BigDecimal bd2=new BigDecimal("1.[telefone removido]");  
BigDecimal retorno = bd1.add(bd2); 

System.out.println( retorno  );
​
// output: 215.[telefone removido]
mateusviccari

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:

ViniGodoy

Para entender pq o Java calcula errado:

al.barbosa

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."); } } }

pmlm

Leitura interessante sobre o tema.

Criado 14 de junho de 2012
Ultima resposta 14 de jun. de 2012
Respostas 6
Participantes 5