奇怪且不正确的 Excel 公式结果?

Strange and Incorrect Excel Formulas Result?

我想获取公式结果的长度,但 returns 不正确。

比如我把1005放在A1单元格里,把公式=(A1/1000-FLOOR(A1/1000,1))*1000代入B1结果是5,就对了.但是当我把公式=LEN(B1)放到单元格C1时,结果是16?更糟糕的是,公式 =REPT(0,3-LEN(TEXT(B1,"0")))&(B1) or =REPT(0,3-LEN(TEXT((A1/1000-FLOOR(A1/1000,1))*1000,"0")))&((A1/1000-FLOOR(A1/1000,1))*1000) returns 004.99999999999989??

之所以=LEN(B1) returns 16是因为单元格B1中的值可能显示5,但是它实际上 在内部存储 4.99999999999989 - 当按 LEN().

评估为字符串时,该数字中有 16 个字符

您可以通过反复单击“增加小数位数”按钮亲眼看到:

此处,显示最终有足够的小数位来反映基础值(LEN 函数忽略尾随零 - 同样,这些是 显示 零而不是存储的零).

如果您只需在单元格中输入以下公式,您也可以看到同样的结果:

=1.005-1

这实际上有19个字符,而不是16个,因为我们还没有乘以1000:

0.00499999999999989

从显示的 5 到实际存储的 4.99999999999989 的精度损失确实是因为浮点数学的工作原理,正如 BigBen 所提到的。

另请参阅 Is floating point math broken? 以获得更广泛的讨论。