大家好,今天和大家分享“4舍6入5不变”,这是一个群友的提问,也许我的描述不对,但题意是这个意思,如输入4.5,返回4.5;输入4.4就返回4;4.6就返回5。
具体效果大家看一下动画
看完动画之后,大家想学这个吗?想学的跟我一起来
公式
=IF(A1='','',INT(A1) LOOKUP(ROUND(MOD(A1,1),1),{0,0.5,0.6},{0,0.5,1}))
公式解释
-
=MOD(A1,1)这个函数作用返回两数相除的余数,第2参数用1,就是提取小数部分,很经典,大家下次谁问你不要整部分,你马上想到它mod
-
由于excel本身存在一个浮点问题,相信许多会计朋友,由于对帐差1分钱,老板也不给发工资的事常有,所以为了保险还要在Mod函数前面嵌套一个round函数,你如果不信,你可以测试这个公式=INT(A1) LOOKUP(MOD(4.6,1),{0,0.5,0.6},{0,0.5,1})返回4.5,我们期望它返回5,这就是浮点问题引起的。我记得有一个学员“真诚待人'在学习vba过程,判断单元格是否相等也纠结这个问题了,公式为=Round(MOD(A1,1),1)精确到小数位第1位。而公式=INT(A1) LOOKUP(ROUND(MOD(4.6,1),1),{0,0.5,0.6},{0,0.5,1})返回了5
-
=int(A1)取整,把它整数部分留下
-
公式=LOOKUP(ROUND(MOD(4.6,1),1),{0,0.5,0.6},{0,0.5,1})第1参数查找值,第2参数{0,0.5,0.6}
第3参数{0,0.5,1},什么意思呢,由于第2参数我们用了升序排序,所以根据lookup函数“二分法“原理,首找找和它相等的,找不到相等的找比它小的,而比它小的有许多,从小的里面找一个最大的
如查找值是0.7,第2参数没有0.7,找比它小的有0.6,0.5,0,小的里面0.6最大,0.6在第2参数第3个位置 ,返回对应第3参数第3个位置的值1
-
if公式在此是起一个屏幕0的作用if(A1='','',公式)如果A1='',那么显示空,否则就显示公式。
最后公式为
=IF(A1='','',INT(A1) LOOKUP(ROUND(MOD(A1,1),1),{0,0.5,0.6},{0,0.5,1}))
好了,今天晚上我们就聊到这里,谢谢大家收看
|