「Java BigDecimalの罠」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
− | ==Java BigDecimalの罠== | + | ==[[Java BigDecimalの罠]]== |
[[Java]] | | [[Java]] | | ||
2020年2月16日 (日) 04:27時点における最新版
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
© 2006 矢木浩人