奇怪且不正确的 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? 以获得更广泛的讨论。
我想获取公式结果的长度,但 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()
.
您可以通过反复单击“增加小数位数”按钮亲眼看到:
此处,显示最终有足够的小数位来反映基础值(LEN
函数忽略尾随零 - 同样,这些是 显示 零而不是存储的零).
如果您只需在单元格中输入以下公式,您也可以看到同样的结果:
=1.005-1
这实际上有19个字符,而不是16个,因为我们还没有乘以1000:
0.00499999999999989
从显示的 5
到实际存储的 4.99999999999989
的精度损失确实是因为浮点数学的工作原理,正如 BigBen 所提到的。
另请参阅 Is floating point math broken? 以获得更广泛的讨论。