Teste de números em BigDecimal

Fiz esse teste:

[code]public class TesteArredondamento {

public static void main(String[] args) {
	BigDecimal a = new BigDecimal(4.01);
	System.out.println(a);	
}

}[/code]
O resultado foi 4.0099999999999997868371792719699442386627197265625
Alguém poderia me explicar por que aconteceu isso?
Eu gostaria de salvar um BigDecimal em um campo NUMERIC(18,2) do firebird pelo hibernate. Após salvar, eu irei fazer a pesquisa. Creio que dessa forma terei problemas.
Ex: preciso salvar a altura 4,02. Porém, antes de fazer isso, preciso verificar se o 4,02 já está no banco. Alguma dica para evitar dores de cabeça e erros no programa?

Olá,

Utilize o cosntrutor com String numérica, fazer o que você fez é quase o mesmo que usar floats diretamente emte rmos de arredondamento :wink:

Obrigado. É isso mesmo!
Depois que percebi que fazendo isso eu estaria utilizando o construtor que recebe double como parâmetro, vi na documentação que a melhor forma de fazer isso é usando o construtor que recebe String. Por exemplo, new BigDecimal(“4.3”).

Estou percebendo que estou meio malandro :oops:
Lá na documentação do BigDecimal(double) fala exatamente o que eu perguntei :!: