我对 float
和 double
之间的区别感到困惑。我读过this post 。我认为区别只是精度而已。所以我预计如果 0.1 + 0.2 == 0.3
返回 false
则返回 0.1f + 0.2f == 0.3f
。
但实际上 0.1f + 0.2f == 0.3f
返回 true
。为什么会这样?
这是一个纯粹的 Java 问题还是什么?
最佳答案
不,这只是十进制到二进制转换的产物。
在底层, float 以二进制表示。数字0.1无法用二进制精确表示,因此需要四舍五入到最接近的可表示数字,其中float
为:
0.100000001490116119384765625
而double
是:
0.1000000000000000055511151231257827021181583404541015625
事实证明,如果将最接近 0.1 的 double
和最接近 0.2 的 double
相加,然后将结果舍入到最接近的 double
,你实际上并没有得到最接近 0.3 的 double
,而是得到它后面的一个(通常打印为 0.30000000000000004
,但实际上有更多的数字),因此缺乏平等。
另一方面,如果将最接近 0.1 的 float
和最接近 0.2 的 float
相加,则将结果舍入为最接近的 float
,您确实得到了最接近0.3的 float
,因此相等。
关于java - 浮点运算和 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506969/