公式改成这样=IF(AND(ROUND((a*1000-INT(a*100)*10),4)=5,MOD(INT(a*100),2)=0),INT(a*100)/100,ROUND(a,2))
至于原因呢,我可以解释一下:
在存储数字时,对应的二进制数字可以表示每一个数字或分数。例如,分数 1/10 在十进制中可以表示为 0.1。但是,同一个数字在二进制格式中变成了二进制循环小数
0001100110011100110011(等等)
并且可以无限循环。此数字无法用有限的空间量来表示。因此,此数字在存储时向下舍入大约 -2.8E-17
当产生了一个因太小而无法表示的数字时,会发生下溢。在 IEEE 和 Excel 中,结果是 0(如果你用excel2007,你会发现有的计算的结果是 -0 )
再比如a*1000-INT(a*100)*10) a=32的时候这个结果是5.00000000000364,结果不等于5,所以的你的公式得不到正确结果,解决的办法是用ROUND 函数
晕哦,打字慢了,比高手慢了
=IF(AND(ROUND((A1*1000-INT(A1*100)*10),10)=5,MOD(INT(A1*100),2)=0),INT(A1*100)/100,ROUND(A1,2))