!!!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