double d = 0.0;
for (int i = 0; i < 10; i++)
{
d = d+0.1;
}
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)
这是我在"最小惊喜原则"上阅读的一个例子
我只是好奇为什么代码会返回0.999999999,如果我将d的数据类型更改为float,我得到1.0000001.这种行为背后的原因是什么?
这是浮点数不精确的经典案例.由于0.1不能以二进制形式干净地表示(它是一个重复的数字),因此随着数字被反复添加到自身中,存在舍入误差.当我们更改为浮点数时,行为的差异仅归结为在更多位存储过程中实际保持0.1的差异.
如果您需要十分精确的十进制数表示,BigDecimal类将很快成为您最好的朋友.基于它如何在内部存储小数的细节而不会损失精度,计算可以保持其完整性.
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |