Kotlinで小数を含む値の計算を行う場合、float や double型を使用して計算すると誤差が生じることがあります。
小数を含む値を計算する場合は、BigDecimal型を使用して計算します。
目次
BigDecimal型を使用して計算する
1. 小数を加算する
小数を double型で計算すると次のように、誤差が生じることがあります。
double型で計算
1 2 3 4 |
var dNum1 = 0.00635 var dNum2 = 0.00001 println( dNum1 + dNum2 ) // 0.006359999999999999 |
期待する結果は
0.00635 + 0.00001 = 0.00636
ですが、結果は 0.006359999999999999 になってしまいました。
次のように BigDecimal型で計算すると期待する結果になります。
BigDecimal型で計算
1 2 3 4 |
var bdNum1 = BigDecimal("0.00635") var bdNum2 = BigDecimal("0.00001") println( bdNum1 + bdNum2 ) // 0.00636 |
2. 小数を減算する
小数をdouble型で減算すると、加算と同様に誤差が生じることがあります。
double型で計算
1 2 3 4 |
var dNum1 = 0.1 var dNum2 = 0.01 println( dNum1 - dNum2 ) // 0.09000000000000001 |
こちらも、BigDecimal型を使って計算すると正しい結果が得られます。
BigDecimal型で計算
1 2 3 4 |
var bdNum1 = BigDecimal("0.1") var bdNum2 = BigDecimal("0.01") println( bdNum1 - bdNum2 ) // 0.09 |
上記のように、小数を含む値の計算は BigDecimal型を使用して計算することをお勧めします。