double型からBigDecimalを生成するときの注意点
Javaでdouble型からBigDecimal型を作るときは、次のようにするとよさげです。
double d = 0.1D;
DecimalFormat df = new DecimalFormat("0.#####");
BigDecimal bd = new BigDecimal(df.format(d));
(最大桁数が多いときは#の数を増やせばOK。余った#は表示されないので。)
単純に
double d = 0.1D;
BigDecimal bd = new BigDecimal(d);
とすると、JavaのAPIドキュメントにもある通りの誤差が生じます。
たとえば、
0.1000000000000000055511151231257827021181583404541015625
のような感じで。値としては微小な誤差ですが、見た目上は大きく違いますね。
これを、APIドキュメントにしたがって
double d = 0.1D;
BigDecimal bd = new BigDecimal(d.toString());
とすると、誤差はなくなります。
ただ、これでも桁数が多いと
0.00010
のようになることがあるようでした。
それをDecimalFormatをかけてやることで解決したのが、最初のコードです。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/math/BigDecimal.html#BigDecimaldouble