有没有人知道为什么Excel在使用SUM函数时会对同一个问题给出不同的答案?
如果您输入:
=0.1+0.1+0.1-0.3
与[{1}}相比,您获得了不同的(正确的)响应:
0
这给出了=SUM(0.1+0.1+0.1-0.3)
的错误答案。
据我所知,Excel使用的是IEEE 754,这解释了为什么第二个关闭了,但我想知道的是两者有何不同,以及第一个如何才能使其正确?
答案 0 :(得分:3)
这取自Microsoft's page解释浮点运算:
值达到零时的示例
在Excel 95或更早版本中,在新工作簿中输入以下内容:
A1: =1.333+1.225-1.333-1.225
右键单击单元格A1,然后单击“设置单元格格式”。在“数字”选项卡上, 单击类别下的科学。将十进制位置设置为15.相反 显示0,Excel 95显示-2.22044604925031E-16。
然而,Excel 97引入了一种尝试纠正的优化 对于这个问题。应该进行加法或减法运算 在值为或非常接近零,Excel 97及更高版本将 补偿由于转换而引入的任何错误 二进制的操作数。在Excel中执行上面的示例 97及更高版本正确显示0或0.000000000000000E + 00 in 科学记数法。
如果计算中包含括号,似乎不应用最后一段中提到的优化 - 可能会破坏计算顺序。例如:
=0.1+0.1+0.1-0.3 = 0
然而:
=(0.1+0.1+0.1-0.3) = 5.551115123125780E-17
然而,错误估计不仅适用于括号中的数字,也适用于外部的数字,前提是公式中有括号。所以:
=0.1+0.1+0.1-0.3+(0.1+0.1+0.1-0.3) = 1.110223024625160E-16
尽管第一部分没有括号,但这个计算在计算中给出了两倍的错误。