在新的工作表中(我使用的是 Excel 2013),从左上角开始输入:
A | 乙 | C |
---|---|---|
=18.6 + 67.2 | =A1-85.8 = 0 | =(A1-85.8) * 1000000000000 |
期待
A | 乙 | C |
---|---|---|
85.8 | 真的 | 0 |
实际结果
A | 乙 | C |
---|---|---|
85.8 | 错误的 | 0.014210855 |
我很清楚浮点数可以表现得像这样,但我仍然惊讶于它发生在对每个具有少量有效数字和相似数量级的数字进行如此简单的运算时。
有人能解释为什么会发生这种情况以及为什么它只发生在某些值对(并且始终是非整数)上吗?
像这样填充了许多行(并重复使用F9
):
A | 乙 | C | 德 | 埃 |
---|---|---|---|---|
=RANDBETWEEN(10, 1000)/10 |
=RANDBETWEEN(10, 1000)/10 |
=A1 + B1 |
=C1-ROUND(C1,1)=0 |
=(C1-ROUND(C1,1)) * 1000000000000 |
有助于证明这种现象明显的随机性。
答案1
=A1-85.8 = 0
我们可以通过更新 B 列来看到这种奇怪的效果(Excel 认为应该是这样的)=A1-85.8
因此,使用 ROUND 来纠正它
例如
=ROUND(A1-85.8, 0) = 0
要解释原因请查看此来源这解释了一切。(太多了,无法复制)
另外,来自上述同一链接
在某些情况下,您可以使用“精度显示”选项来防止舍入误差影响您的工作。此选项强制将工作表中每个数字的值设置为显示值。要启用此选项,请按照以下步骤操作:
在 Excel 2003 及更早版本中,单击“工具”菜单上的“选项”。在“计算”选项卡上,单击以选中“按显示精度”复选框。
在 Excel 2007 中,单击“Microsoft Office 按钮”,单击“Excel 选项”,然后单击“高级”类别。在“计算此工作簿时”部分中,选择所需的工作簿,然后选中“将精度设置为显示”复选框。
在 Excel 2013 和 2010 中,单击“文件”,然后单击“选项”,然后单击“高级”类别。在“计算此工作簿时”部分中,选择所需的工作簿,然后选中“将精度设置为显示”复选框。