トップ 差分 一覧 ping ソース 検索 ヘルプ PDF 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



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.