Java双精度和麻烦

Tob*_*bia 1 java floating-point double

我想知道为什么我会收到这个错误.(这是Eclipse调试的显示日志)

var
     (double) 2.8
tot.getIva()
     (java.lang.Double) 0.17
var+tot.get()
     (double) 2.9699999999999998
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我没有简单地得到2.97!

Lou*_*man 12

如果你想2.97,你应该使用BigDecimal.

doubles以二进制形式存储为分数,而不是十进制.因此3.75,例如,只是存储为2^1 + 2^0 + 2^(-1) + 2^(-2).

2.8并且0.17不能完全表示为二进制分数,因此会出现一些舍入误差.

您可能还会发现本文很有帮助.