Java calculando errado o valor de 2 doubles?

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

Leitura interessante sobre o tema.