Excel 计算结果莫名多出很多位小数,据说是浮点误差?

Excel 计算结果莫名多出很多位小数,据说是浮点误差?

谢谢邀请。

你可能会觉得,Excel这么强大的电子表格软件,居然连一些简单的加减法都计算不正确,

比如:

嗯,是的,Excel有时候就是做不了简单的算术。

不要奇怪,也不要莫名惊诧,Excel就是这么任性。

还有更奇怪的,Excel连你手工输入的数字都会弄错。

不信?

你在单元格输入39524.848、55556.848、65535.848看看。

是不是小数点后的848变成了8479999999?

这是搞的什么鬼?

这是浮点计算引起的误差!

这很常见,也并不奇怪。

走的夜路多了,自然会碰到鬼,你用久了电子表格,肯定会遇到这种情况。

为什么会这样?

由于Excel是采取二进制存储数字的(在Excel中浮点数分为三个部分,总长度为 65 位:符号、指数和尾数)。而某些十进制的有穷非循环数在二进制下是无穷的循环数,比如0.1。虽然这些数字在以 10 为底的情况下可以完美地表示,但相同数字在二进制格式下,在尾数中存储时就变成了以下二进制循环数字:

000110011001100110011(等类似数字)

Excel在储存这些数字时,它在尾数中只存储能够容纳的部分,并截断其余部分。这导致在存储数字时产生大约 -2.8E-17 或 0.000000000000000028 的误差。

这个道理就象在十进制下无法准确地表示1/3一样,只能用循环小数 0.33333333333333333333来近似表示。

遇到这种情况怎么办?

遇到这种情况,有二种解决方案:

方案一:在公式中加round来四舍五入。

方案二:使用“将精度设为所显示的精度”选项。但是此选项要谨慎使用,会影响本工作簿所有的数值。

详细情况可参见