このエラーが発生する理由を知りたいです。(Eclipseデバッグの表示ログです)
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
なぜ単純に 2.97 にならなかったのか理解できません!
このエラーが発生する理由を知りたいです。(Eclipseデバッグの表示ログです)
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
なぜ単純に 2.97 にならなかったのか理解できません!
必要に応じ2.97
て、 を使用する必要がありBigDecimal
ました。
double
s は、10 進数ではなく、 2 進数で分数として格納されます。したがって3.75
、たとえば、 は として保存され2^1 + 2^0 + 2^(-1) + 2^(-2)
ます。
2.8
2進分数として正確に0.17
表すことはできないため、丸め誤差が発生します。
この記事も役立つかもしれません。
これは、Java の浮動小数点型 (float および double) の精度によるものです。無期限の精度が必要な場合は、BigDecimal
代わりに を使用してみてくださいdouble
。