
谢谢邀请。
你可能会觉得,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来四舍五入。
方案二:使用“将精度设为所显示的精度”选项。但是此选项要谨慎使用,会影响本工作簿所有的数值。
详细情况可参见
