答案1
由于起始数字比结果大很多,因此你可能会遇到精度损失,原因是IEEE 754 浮点算术。Excel 使用 IEEE 754 双精度。
我不会深入探讨细节,而是说明这个问题。首先,让我们将所有数字转换为 IEEE 754:
11474.97 ≙01000000 11000110 01101001 01111100 00101000 11110101 11000010 10001111
... 在哪里0是符号(正),10000001100是指数,其余是尾数。
-10781.34 ≙11000000 11000101 00001110 10101011 10000101 00011110 10111000 01010010
693.63 ≙01000000 10000101 10101101 00001010 00111101 01110000 10100011 11010111
可以看出,大数恰好具有相同的指数。指数越大,存储的数字越不精确:
11474.97 → 11474.9699999999993451638147235
-10781.34 → -10781.3400000000001455191522837
693.63 → 693.62999999999995452526491135
从对齐的数字中您已经可以看到,693.63 的存储方式更加精确。
因此,将这些数字相加的结果是:
01000000 10000101 10101101 00001010 00111101 01110000 10100011 11010000
我们再比较一下:
01000000 10000101 10101101 00001010 00111101 01110000 10100011 11010000 – 结果 01000000 10000101 10101101 00001010 00111101 01110000 10100011 11010111 – 常数
所以,不太一样。您应该始终将浮点数与容差进行比较。像这样:
abs(a - b) < 0.000000001
答案2
我不知道为什么会这样,但我正在使用 Office 2010 并遇到了同样的问题。
为了解决这个问题,我将 A5 改为 =ROUND(A3, 2)=ROUND(A4, 2),这样就解决了问题,所以我只能假设某个地方的微小金额的分数存在某种小问题导致了错误。
而且,正如 @yass 在评论中所说,使用 IF 语句会更好用,并且会让事情变得更整洁,尽管在这种情况下,它并不是 100% 必要的。