用F9看一下,可知这里并不是我们想看到的0。这不是BUG,这是浮点运算引起的误差,为了提高运算速度,程序在计算小数(整数无此误差)过程中,小数点的位置是不固定的(也就有了定点和浮点之分)。这种误差是客观存在的,这就要我们在应用时要特别注意,如果涉及到小数的运算,而又要以中间结果作精确判断时,需要对中间结果加以修正。
误差一般发生在小数点后10位到12位以后,我们可以用8位来修正:
=IF(A1="","",IF(ROUND(MOD(A1,B1),8)=0,"P","F"))
这是Excel 浮点运算误差导致的,你可以把公式改为:
=IF(A1="","",IF(ROUND(MOD(A1,B1),5)=0,"P","F"))
知识扩展:
Excel 在运算时,先把十进制数字转换为二进制数字进行计算,再把结果转换为十进制显示出来,因此,对于有小数点的小数在转换过程中就会产生很小的误差,我们称之为浮点运算误差。
再补充一下:Excel 的运算精度为15位有效数字,超过15位会显示为0,如输入18位身份证号,如果最后一位不是X,或者单元格不设置为文本,则前面15位正常显示,后3位显示为0。
这个问题其实不能怪EXCEL,是计算机的问题,此问题的出现与浮点数有关,把公式改为:
=IF(A1="","",IF(ROUND(MOD(A1,B1),1)=0,"P","F"))
MOD(A1,B1)不等于0!!!!!!
不要随便怀疑EXCEL什么BUG什么
基本都是自己出错了
mod运算一般针对整数,小数的excel会把先他四舍五入为整数,按你的b1=0.02会变成0了,结果就成了无穷小