excel中求和结果出错,为什么?

excel中求和结果出错,为什么?

计算机浮点问题,详情可以往下看。

单元格中输入“=12-11.7”,返回的结果不是0.3,而是0.300000000000001

单元格中输入“=(43.1-43.2)+1”,返回的结果不是0.9,而是0.899999999999999

单元格中输入“55556.848”,会自动变成55556.8479999999

这么强大的Excel,居然连一些简单的加减法都计算不正确。

这是什么原因造成的呢?大家都知道,计算机采用的是二进制,以二进制存储浮点数时,会引起一个混乱的问题是,某些 10 进制的有穷非循环数在二进制下是无穷的循环数。这方面最常见的示例是值 0.1 及其变体。虽然这些数字在以 10 为底的情况下可以完美地得到表示,但二进制格式下的相同数字在尾数中存储时就变成了以下二进制循环数字:000110011001100110011(等类似数字)

Excel会在在尾数中存储能够容纳的部分,并截断其余部分。这导致在存储数字时产生较小的误差。

在二进制下,即使是常见的十进制分数(例如十进制的 0.0001)也无法得到准确表示。(0.0001 是一个二进制循环分数,以 104 位为一个周期)。这类似于为什么分数 1/3 在十进制下无法得到准确的表示(循环小数 0.33333333333333333333)。

这个问题怎么解决呢?

由于造成的误差非常小,大多数境况下是不需要处理的,如果要处理,有下面两个方法。

方法1:使用ROUND函数保留小数位数

方法2:设置Excel已显示精度为准

可在“文件”→“选项”→“高级”中可设置。

但是我并不推荐使用第二种方法的设置,例如,如果选择显示两位小数的数字格式,然后打开“以显示精度为准”选项,在你保存工作簿时,所有超出两位小数的精度都将会丢失。此选项影响活动的工作簿(包括所有工作表)。而且还无法撤消此选项和恢复丢失的数据。