ste*_*lla 2 java language-agnostic floating-point
我float
和之间的区别感到困惑double
.我读过这篇文章.我认为差异只在于精确度.所以我期望如果0.1 + 0.2 == 0.3
返回false
那么0.1f + 0.2f == 0.3f
.
但实际上是0.1f + 0.2f == 0.3f
回归true
.为什么?
这是纯粹的Java问题还是什么?
不,它只是十进制二进制转换的工件.
在引擎盖下,浮点数以二进制表示.数字0.1不能用二进制精确表示,因此需要四舍五入到最接近的可表示数字,其中float
:
0.100000001490116119384765625
而且double
是:
0.1000000000000000055511151231257827021181583404541015625
所以事实证明,如果你加上double
最接近的0.1,并且double
最接近的0.2,然后将结果舍入到最近的double
,你实际上并没有得到double
最接近的0.3,而是你得到它之后的那个(通常打印为0.30000000000000004
,但实际上有更多的数字),因此缺乏平等.
在另一方面,如果添加了float
接近0.1,而float
最近的0.2,那么一轮结果到最近float
,你就得到了float
最近的0.3,因此平等.
归档时间: |
|
查看次数: |
201 次 |
最近记录: |