| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
ページの作成:「==Java BigDecimalの罠== [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

案内メニュー