在工程资料中,我们经常需要依照GB-T 8170-2008《数值修约规则与极限数值的表示和判定》对数据进行处理,行业内的习惯叫法是四舍六入,奇进偶舍。在工程资料中,如果计算两个数的平均值经常会碰到需要奇进偶舍的情况。例如集料筛分,土工的含水率计算等。因为实际工作中一般都是保留一位小数点,这里我只对保留一位小数点的情况做分析。下面介绍三种利用Excel函数实现这一要求的方法。RZK检测VBA
第一种方法:直接从规范要求理解,分三种情况RZK检测VBA
1、要保留的数值后第一位不是5,直接四舍五入。RZK检测VBA
2、要保留的数值后第一位是5且5前面是偶数,不进位。RZK检测VBA
3、要保留的数值后第一位是5且5前面是奇数,进位。RZK检测VBA
这几种情况用只需要嵌套二层IF函数就可以全部概括。我们主要用到的有IF、 MOD、MID、ROUND这几个函数。判断是否有5和5前面是奇数还是偶数都要用到MOD(余数)函数。RZK检测VBA
下面来写公式,假设我们需要计算平均值的两个单元格为A1、A2单元格。首先第一层IF,判断条件MOD(ROUND((A1+A2)/2,2)*10,1)=0.5,如果满足,需要做第二层IF,不满足直接ROUND((A1+A2)/2,1)。RZK检测VBA
第二层IF,判断条件:MOD(MID(ROUND((A1+A2)/2,2),3,1),2)=0这里用到了MID函数,是为了引用5前面的数,然后再用MOD判断奇偶。RZK检测VBA
如果满足(是偶数)ROUND((A1+A2)/2,2)-0.05,不进位。RZK检测VBA
如果不满足ROUND((A1+A2)/2,2)+0.05,进位。RZK检测VBA
完整的公式是这样的=IF(MOD(ROUND((A1+A2)/2,2)*10,1)=0.5,IF(MOD(MID(ROUND((A1+A2)/2,2),3,1),2)=0,ROUND((A1+A2)/2,2)-0.05,ROUND((A1+A2)/2,2)+0.05),ROUND((A1+A2)/2,1)。RZK检测VBA
第二种方法:利用数字计算规律。RZK检测VBA
看到第一种方法,估计大家都会觉得非常麻烦,易出错且不容易修改。下面利用数字规律公式会简洁得多。我们发现,当后面有5时,只要先将这个数除以2,再修约到一位小数点,然后乘以2,就可以实现奇进偶舍了。RZK检测VBA
例如:2.05/2=1.025修约一位=1.0乘以2=2.0RZK检测VBA
2.15/2=1.075修约一位=1.1乘以2=2.2RZK检测VBA
注意,后面没有5时,这个数字规律是不对的。RZK检测VBA
根据前面的分析,只有两种情况了,一种有5,一种没有。只需要一层IF,判断条件跟前面的第一个一样,MOD(ROUND((A1+A2)/2,2)*10,1)=0.5。RZK检测VBA
完整的公式是这样的:RZK检测VBA
=IF(MOD(ROUND((A1+A2)/2,2)*10,1)=0.5,ROUND((A1+A2)/2/2,1)*2,ROUND((A1+A2)/2,1)),这个是不是比第一个公式方便多了。RZK检测VBA
第三种方法:也是利用数字计算规律RZK检测VBA
这里也是按两种情况分析的,有5且5前面为偶数时不进位,否则四舍五入。我们发现,当有5且5前面为偶数时,除以20会得到余数5,而其他的情况则不会。RZK检测VBA
例如:105、125、145、165、185,除以20余数都是5RZK检测VBA
而100 、115、120、135、155、175、180、195等等都不会RZK检测VBA
下面来写公式:还是假设需要计算平均值的两个单元格为A1、A2单元格。RZK检测VBA
公式是这样的:RZK检测VBA
=ROUND(((A1+A2)/2),1)-(MOD(INT(ROUND((A1+A2)/2,2)*100),20)=5)/10这里也利用了Excel的判断功能RZK检测VBA
(MOD(INT(ROUND((A1+A2)/2,2)*100),20)=5)/10RZK检测VBA
是用来判断真假的,将平均值结果乘以100,再除以20,余数是5就就证明5前面是偶数,就返回TURE(真),否者返回FALSE(假),excel里面TRUE=1,FALSE=0.为假时后面(MOD(INT(ROUND((A1+A2)/2,2)*100),20)=5)/10等于0,四舍五入。否则等于0.1,前面减去0.1,不进位。RZK检测VBA
这三种方法各有不同,大家可以根据自己的理解和习惯去使用。RZK检测VBA |