我和我的妻子在每个月初都有一个电子表格来计算我们的财务状况,这个月的单元格中有一个奇怪的数字F9
。
单元格F9
中的公式="+ £"&-'Sue''s Outgoings'!C13&" Shortfall"
应该输出+ £57.35 Shortfall
但输出+ £57.3500000000001 Shortfall
。
为了尝试解决这个问题,我输入=-'Sue''s Outgoings'!C13
了单元格F13
,该单元格准确地输出了'Sue''s Outgoings'!C13
57.35 的内容。(见下面的第二张图片)
工作表中的所有单元格Sue's Outgoings
都被格式化为Currency
格式化,我暂时重新格式化了所有单元格,General
看看那里是否有一个隐藏的奇怪人物,什么都没有。表格中的所有数字Sue's Outgoings
都是直线数字,而不是公式的结果。
0.0000000000001 到结果中的虚假添加还有什么其他原因?
Excel 使用浮点数学,这意味着有时您的值中隐藏着这样的数字。(https://docs.microsoft.com/en-US/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result)
这些通常会正确显示,但是当您将它们转换为文本时,这些确实可能会导致问题,一种解决方法是在您的公式中使用 ROUND:
要为问题添加修复而不是解决方法,请按照@MátéJuhász 链接的 Microsoft Docs 页面:
如果您正在处理纯粹基于金钱的电子表格,例如 am here,或其他任何固定小数位数的电子表格,您可以将工作表设置为“显示的精度”。
这样就无需担心需要解决的浮点数学错误
ROUND()
。您要求 Excel 在文本字符串的中间显示一个数字,而没有告诉它使用什么格式或以任何其他方式提示它意识到您可能希望它弄清楚如何最好地显示它。
舍入是这里的一个选项,但通常我认为在这里明确告诉 Excel 你希望这个数字如何出现在文本中间是一种很好的做法(我在这里使用简单的两位小数格式:
或者,您可以通过将数字拉入并使用这样的自定义数字格式来完成整个操作(请注意,它将正数和负数显示为正数,并带有不同的标签):
很久以前,计算机程序员决定不完美地存储十进制数字。
理论上,二的平方根可以存储在计算机中。
出于同样的原因,当您使用笔和纸书写以下符号时,它不需要无限量的纸和墨水。
实际上,计算机程序员不使用精确的十进制数。因此,每次加、减、乘或除时,都会引入舍入误差。
如果想了解更多,可以谷歌搜索“IEEE 单精度浮点数”。