MOD函数不同计算方式返回结果不一致问题咨询
问题根源:二进制浮点数精度误差
这事儿说白了就是Excel背后的二进制存储在搞怪,我给你拆解明白:
你直觉上觉得(1.2-1)/0.2的结果是精确的1,但实际上十进制的0.2无法用二进制精确表示——就像你在十进制里永远写不完1/3=0.333333...一样,二进制里的0.2是无限循环的小数,Excel只能存储它的近似值。
所以整个计算链的误差是这样来的:
1.2在Excel里存储的是一个接近1.2但略有偏差的近似值- 计算
1.2-1后,得到的不是精确的0.2,而是另一个带误差的近似值 - 用这个近似值除以
0.2(同样是近似存储的),最终结果不是精确的1,而是一个极其接近1但略小于1的数(比如0.9999999999999999)
那为什么你看到MOD返回1?其实它返回的是那个略小于1的近似值,只是Excel的默认单元格格式会把这个极接近1的小数四舍五入显示为1。你可以把单元格格式改成数字(15位小数),就能看到真实的近似值了。
而直接用MOD(1,1)时,1是精确的整数,没有精度误差,所以自然返回预期的0。
解决方法
用ROUND函数先把计算结果修正到Excel能精确处理的精度,再套MOD:
=MOD(ROUND((1.2-1)/0.2,15),1)
这里的15是Excel能精确表示的十进制小数位数,这样就能得到正确的0了。
内容的提问来源于stack exchange,提问作者Scott Craner
相关产品推荐
相关产品推荐

