Androidで電卓アプリを作っていて、
double a = 1.1; double b = 2.2; System.out.println(a + b);
を計算すると、3.3になると思いきや、
3.3000000000000003
になって、予想外の結果となった。
doubleの小数点の精度の問題でこうなってしまうようだ。
確かに2進数での小数点は、
1/2 + 1/4 + 1/8 + ...
という形になるので、正確に1.1や2.2が表現できるわけではない。
解決策は、BigDecimalを使えば良いようだ。
BigDecimal big_a = new BigDecimal("1.1"); BigDecimal big_b = new BigDecimal("2.2"); System.out.println(big_a.add(big_b));
とすれば、3.3となった。
BigDecimalを初期化する際は、コンストラクタに文字列を渡さないといけない。
ここを数値すると、その時点で誤差が発生してしまうので注意が必要。