Excel 2010中指定IF逻辑公式返回FALSE异常问题咨询
解决Excel 2010中IF公式浮点精度导致的判断异常问题
兄弟,这问题我太熟了——根本不是你公式写错了,是浮点精度误差在搞鬼!
你手动计算的171 - 21.38 - 34.2确实等于115.42,和115.43的差值刚好是0.01,但Excel用二进制浮点数存储数值,很多十进制小数没办法被精确表示。实际Excel内部计算出来的结果可能是类似115.41999999999999或者115.42000000000001的近似值,这时候ABS(115.43 - 这个近似值)就会比0.01大一点点(比如0.01000000000001),自然就返回FALSE了。
给你几个靠谱的解决办法:
- 方案一:用ROUND函数抹平精度误差
把计算结果先四舍五入到指定小数位(比如你这里的两位),再做比较:
这样就只比较两位小数层面的差值,彻底规避浮点误差的影响。=IF(ABS(115.43 - ROUND(171 - 21.38 - 34.2, 2)) <= 0.01, TRUE, FALSE) - 方案二:用DELTA函数简化判断
Excel自带的DELTA函数就是专门用来处理浮点精度下的数值比较的,它会自动忽略微小的精度偏差,公式可以简化成:
相等时返回1(等价于TRUE),不等时返回0(等价于FALSE),比自己写IF+ABS更省心。=DELTA(115.43, 171 - 21.38 - 34.2) - 方案三:适当放宽阈值(不推荐)
你之前改成0.02能返回TRUE就是这个道理,但这只是治标不治本,遇到其他精度偏差可能还是会出问题,优先选前两种方案。
这种浮点精度问题在所有用二进制存储数值的软件里都可能出现,以后遇到小数比较的场景,一定要记得先处理精度问题,别直接硬比哦。
内容的提问来源于stack exchange,提问作者Daniel




