Javaで小数を含む値の計算を行う場合、float や double型を使用して計算すると誤差が生じることがあります。
小数を含む値を計算する場合は、BigDecimal型を使用して計算します。
目次
BigDecimal型を使用して計算する
1. 小数同士を加算する
小数同士を double型で計算すると次のように、誤差が生じることがあります。
double型で計算
1 2 3 4 5 6 7 |
double num1 = 0.00635; double num2 = 0.00001; double result = num1 + num2; // 実行結果 // 0.006359999999999999 |
期待する結果は
0.00635 + 0.00001 = 0.00636
ですが、結果は 0.006359999999999999 になってしまいました。
次のように BigDecimal型で計算すると期待する結果になります。
BigDecimal型で計算
1 2 3 4 5 6 7 |
BigDecimal num1 = new BigDecimal("0.00635"); BigDecimal num2 = new BigDecimal("0.00001"); BigDecimal result = num1.add(num2); // 実行結果 // 0.00636 |
2. 小数同士を減算する
次に、小数同士を double型で減算すると、加算と同様に誤差が生じることがあります。
1 2 3 4 5 6 7 |
double num1 = 0.100; double num2 = 0.099; double result = num1 - num2; // 実行結果 // 0.0010000000000000009 |
こちらも、BigDecimal型を使って計算すると正しい結果が得られます。
1 2 3 4 5 6 7 |
BigDecimal num1 = new BigDecimal("0.100"); BigDecimal num2 = new BigDecimal("0.099"); BigDecimal result = num1.subtract(num2); // 実行結果 // 0.001 |
上記のように、小数を含む値の計算は BigDecimal型を使用して計算することをお勧めします。