トップ 一覧 ping 検索 ヘルプ RSS ログイン

Java BigDecimalの罠の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Java BigDecimalの罠
[Java]

!問題の発生
BigDecimalを使えば、正確な演算ができると考えてしまうかもしれないが、以下のように、doubleからBigDecimalを生成すると、正確な値にならない。

例
 double d = 0.1d;
 java.math.BigDecimal bd = new java.math.BigDecimal(d);
 System.out.println(bd);

結果
 0.1000000000000000055511151231257827021181583404541015625

*上記例は、2進数で "0.1"を完全に表現できないため、発生する。
*小数点以下を 1/n (n=2の乗数)の合計にて表現するため

!対処
文字列にするとか。
BigDecimalを文字列から生成するとか。
例
 double d = 0.1d;
 java.math.BigDecimal bd = new java.math.BigDecimal(String.valueOf(d));
 System.out.println(bd);
結果
 0.1