BigDecimalとdoubleの変換について

doubleは浮動小数点型なので(?)、小数を正確に表現できないことは知ってました。
で、BigDecimalに変換する際に失敗しました。


以下、やっちゃった間違い。

double d = 0.1;
BigDecimal b = new BigDecimal(d);

System.out.println(b);

上記の出力結果
0.1000000000000000055511151231257827021181583404541015625


で、0.1を保持するBigDecimalオブジェクトを作成したい場合、
"0.1"という文字列よりBigDecimalを作成する必要があるらしい。
それを簡単にやってくれるのが、BigDecimal#valueOfメソッドだそうで、

double d = 0.1;
BigDecimal b = BigDecimal.valueOf(d);

System.out.println(b);

上記の出力結果
0.1

と、なりました。