【发布时间】:2020-10-21 12:46:52
【问题描述】:
我知道浮点数的数值不准确的普遍问题,但我希望 Excel 和 Google 表格的行为相同。不幸的是,他们没有 - 请参阅以下示例:
A1: 15.525 our reference
A2: =3*5.175 should equal 15.525
A3: =A2=A1 shows TRUE, as expected, in both
A4: =A2-A1 but A2 is actually smaller in Google Sheets, by -1.78E-15 [Excel shows 0.00E+00]
B1: =ROUND(A1,2) shows 15.53, correct, in both
B2: =ROUND(A2,2) shows 15.53, correct, in both - surprisingly in Google Sheets, looking at A4
B3: =B2=B1 shows TRUE, as expected, in both
C1: =B1-A1 shows 0.00499999999999901, in both
C2: =B2-A2 shows 0.00500000000000078, in both
C3: =C2=C1 shows FALSE, as expected, in both
D1: =C1<0.005 consistent with C1, in both
D2: =C2>0.005 consistent with C2, but inconsistent with correct rounding in B2, in both
那么明显的问题是什么?
- A3:Google 表格说具有非零差异的数字是相等的(颤抖)
- A4:Excel 显示行为不同的数字之间的差异为零(C1、C2 等)
- B2/D2:两者都将向上一个比四舍五入的数字小0.005以上的数字
我的问题是:
- 我应该期望两者的行为不同吗?
- 差异是不同实现(可能是数字格式)的无意副产品,还是有意的?
- 这是否记录在某处?
【问题讨论】:
-
您检查过 Excel 文档吗?
-
你不能乘以你的出路吗?
-
这在当前网页版的 Google 表格中无法重现;单元格 A4(“=A2-A1”)显示为零。
-
众所周知,Excel 会修改它的舍入和显示方式。在 Excel 2008 for Mac (12.3.6) 中,A4 中的公式“=A2-A1”显示“0”。但是输入“=(A2-A1)”会显示“-1.77636E-15”。似乎单元格 A1 和 A2 具有 IEEE-754 binary64 值,并且“A2-A1”进行减法并得到非零结果,但是,当公式为“=A2-A1”时,Excel 正在应用一些未公开的舍入规则并强制结果为零。带括号的版本似乎绕过了这一点,让 Excel 将其视为不受 kludge 规则约束的一般计算,并显示实际结果。
-
请注意,如果在另一个单元格中输入“=A4”或“=(A4)”,它仍然显示为“0”,这意味着它不仅仅是强制显示A4 单元格中为零,但记录的结果与该单元格关联。
标签: excel google-sheets floating-accuracy