在上面的 Excel 截图中,我打开了我银行的资金交易 CSV 文件。交易日期在 列中A
,金额在 中B
,银行计算的余额在 中。我在( )D
列中计算我自己的运行余额,并且 列突出显示以指示任何差异(不幸的是,正如截图所示,Excel 显示不等于。F
=SUM($A$2:An)
H
=IF( Dn = "", TRUE, Fn=Dn )
£898.15
£898.15
我想看看是否存在舍入误差,因此在列中K
我设置了公式=Dn-Fn
,然后扩大了显示的小数位数。结果显示有一分钟的误差-0.00000000000272848
。
问题 1:这个无关紧要的错误从何而来,为什么 Excel 突然认为第 206 行的值不同?
问题 2:其他行也有相同的差异(例如 188 和 184 与行 206),那么为什么 Excel 突然抱怨?
问题 3:为什么 Excel 不将货币值视为整数值而不是浮点数,这样根本不应该出现任何错误。
答案1
当您在 Excel 中输入数字时,它们会被转换为内部二进制表示形式,例如,8.25
会被转换为1000.01
,但8.26
会变成1000.01000010100011110101110000101000
。
当您开始在 Excel 中添加数字时,您输入的十进制数字会转换为二进制,总和以二进制计算,然后再转换为十进制。这时,您就会得到一些不准确的数字,例如,-0.00000000000272848
您的数字与 Excel 的数字之间存在差异。您需要将该金额乘以数十亿才能得到不同的美分金额。
因此,测试应该是=IF(ABS(Calculated-Real)<0.01,"OK","Not Equal")
。除非我们有十进制计算机,否则在任何二进制数字计算机中都会遇到此错误。
答案2
- 微小的误差可能是由于四舍五入造成的。您只能在银行的列中看到两位小数,但可能还有更多,请尝试增加那里的小数位数。
- excel 识别的最小差异不是绝对值,而是与比较的数字的大小有关。您可以阅读更多这里
- 使用浮点数的原因通常是覆盖范围的灵活性更大,但我认为现在这并不重要,因为我们无法改变它。
答案3
这是浮点算术错误的典型例子。它是由 Excel 对数字的解释方式引起的,既是 sum 函数的因果关系,也是您手动执行的方式。在 sum 函数完成后,结果很可能被存储为浮点数,这(如您所见)与实际的手动计算并不完全匹配。