关于负数出错的问题讨论: 经过进一步测试,发现16楼前人和我的公式都存在一些问题。如将5.525改为负数-5.525,则对需要修约的0.005的判断会出错,即0.005也存在正负号的问题。因此,A12-0.005=ROUNDDOWN(A12,2)这个条件判断改为: ROUND(MOD(A12,0.01),15),这个条件判断解决了0.005的正负号问题。 本来,从理论上说,MOD(A12,0.01)就能判断第二位小数以后的数字是否是纯粹的0.005,但存在浮点小数的问题,加上ROUND函数就是解决浮点小数的问题。所以有: 公式一:ROUND(A12,2)-(ROUND(MOD(A12,0.01),15)=0.005)*(TRUNC(A12*100)/2=TRUNC(A12*100/2))*IF(A12<0,-0.01,0.01) 其中最后的IF(A12<0,-0.01,0.01)也是解决正负号的问题。 第二位小数的奇偶性用(TRUNC(A12*100)/2=TRUNC(A12*100/2))这个条件判断,也可以用MOD(RIGHT(TRUNC(A12*100)+1),2)来判断,所以有: 公式二:ROUND(A12,2)-(ROUND(MOD(A12,0.01),15)=0.005)*MOD(RIGHT(TRUNC(A12*100)+1),2)*IF(A12<0,-0.01,0.01) 若想保留三位小数,可以将公式中的0.01改为0.001,将0.005改为0.0005,将100改为1000。其余类推。 |