2

このエラーが発生する理由を知りたいです。(Eclipseデバッグの表示ログです)

var
     (double) 2.8
tot.getIva()
     (java.lang.Double) 0.17
var+tot.get()
     (double) 2.9699999999999998

なぜ単純に 2.97 にならなかったのか理解できません!

4

2 に答える 2

14

必要に応じ2.97て、 を使用する必要がありBigDecimalました。

doubles は、10 進数ではなく、 2 進数で分数として格納されます。したがって3.75、たとえば、 は として保存され2^1 + 2^0 + 2^(-1) + 2^(-2)ます。

2.82進分数として正確に0.17表すことはできないため、丸め誤差が発生します。

この記事も役立つかもしれません。

于 2012-05-28T14:55:16.990 に答える
2

これは、Java の浮動小数点型 (float および double) の精度によるものです。無期限の精度が必要な場合は、BigDecimal代わりに を使用してみてくださいdouble

于 2012-05-28T14:55:27.193 に答える