建筑工程材料检测数据的数值修约在excel中的实现

更新时间:2024-01-26 作者:用户投稿原创标记本站原创 点赞:7551 浏览:24178

【摘 要】excel中没有提供能符合按GB/T8170-2008要求数值修约的函数.本文通过excel自带的子函数进行编写,实现了按国标GB/T8170-2008进行修约,经测试,函数能满足标准要求,具有推广价值.

【关 键 词】数值;修约;函数

1.前言

Microsoftexcel是微软公司开发的办公软件microsoftoffice的重要组件之一.Excel由于具有强大的数据处理功能,在工程类日常应用非常广泛.而在技术资料的数据处理当中,经常要对数值进行修约以达到要求的精度.而excel中却没有提供专门的数值修约函数,只能对数值按“四舍五入”规则进行处理,而工程数据处理一般都是对结果按规范进行数值修约,用人工进行修约,繁琐而且易出错.

利用excel强大的数据处理功能,专门编制了能够在excel中直接对数值进行修约的函数以及在宏中的实现.

2.数值修约的有关规定

数值修约国家标准规范GB/T8170-2008《数值修约规则与极限数值的表示和判定》对数值修约的进舍规则如下:

1)拟舍弃数字的最左一位数字小于5时,则舍去,即保留的各位数字不变.

2)拟舍弃数字的最左一位数字大于5,或则是5,而且后面的数字并非全部为0时,则进1,即保留的末位数加1.

3)拟舍弃数字的最左一位数字为5,而后面无数字或全部为0时,若所保留的末位数为奇数(1,3,5,7,9)则进1,为偶数(2,4,6,8,0)则舍弃.

4)负数修约时,取绝对值按照上述1~3规定进行修约,再加上负号

5)0.2单位修约或者0.5单位修约时,分别将拟修约数值X乘以5、乘以2,按指定修约间隔按5X、2X进行修约,所得数值再除以5、除以2.

3.数值修约的逻辑分析及函数设计流程

从以上修约规则可以看出,对于正整数修约到1的情况,数值修约规则与excel提供的Round函数的唯一区别在于,当拟修约值个位数为偶数而且拟舍弃数字刚好为0.5时,按Round函数修约的个位数有进1,而按GB/T8170-2008修约规则进行修约的,个位数没有进1.按照这种情况,我们只需要挑出这种特殊情况,其它情况都可以按照Round函数进行“四舍五入”.检测设需要修约至Y,Y值为修约间隔与单位修约的乘积,如我们通常说的修约至5,即是修约间隔为10,按0.5单位修约.函数运算的框架图如下,

根据上述流程,给出能够在excel中实现数值修约的自编函数如下:

等于IF(AND(MOD(ABS(A1/Y),1)等于0.5,MOD(INT(ABS(A1/Y)),2)等于0),ROUNDDOWN(A1/Y,0)*Y,ROUND(A1/Y,0)*Y)

A1为待修约数值所在excel的单元格的位置,Y为我们需要修约至的数值.

4、对数值修约自编函数的具体分析

本函数通过把拟修约数A1除以需修约至的数Y简化成整数修约至1的问题,修约结果再乘以Y以得到正确的修约数值,符合0.2单位修约和0.5单位修约原则的精神.函数具体分析如下:

1)ABS(A1/Y)是对A1/Y进行取绝对值,确保函数在负数的情况下判断是正确的;

2)MOD是除余函数,MOD(a,b),返回a除以b的余数.MOD(ABS(A1/Y),1)等于0.5判断拟舍弃数字是否为Y/2,MOD(INT(ABS(A1/Y)),2)等于0判断拟保留数字是否为偶数;

3)AND是并列条件函数,AND(条件1,条件2,等),表示括号内的所有条件都为真时才为真,AND(MOD(ABS(A1/Y),1)等于0.5,MOD(INT(ABS(A1/Y)),2)等于0)判断拟保留数字是否为偶且拟舍弃数字是否为Y/2;

4)ROUNDDOWN是向绝对值小的舍去,ROUNDDOWN(A1/Y,0)*Y即是直接舍弃拟舍弃数字;

5)ROUND函数是对数字绝对值进行“四舍五入”进行运算,ROUND(A1/Y,0)*Y是按“四舍五入”的原则的拟修约数进行取值;

6)IF是条件语句,IF(逻辑条件,条件为真时返回值,条件为检测时返回值),本函数的逻辑为判断拟保留数字为偶数,且拟舍弃数字刚好为Y/2两个条件都成立时,直接舍弃拟舍弃数字,否则按“四舍五入”进行计算保留.

5.编写VBA函数

打开模块代码编写窗体.方法为:选择“工具”菜单下的“宏”,再选择visualbasic编辑器,在visualbasic编辑器界面中,选择“插入”菜单中的“模块”命令,即出现模块代码编辑器,随后编辑器里输入如下代码:

PublicFunctiongbxy(aAsDouble,bAsDouble)

x等于Abs(Round(a/b,13))

SelectCasex-Int(x)

CaseIs等于0.5

IfInt(x)/2等于Int(Int(x)/2)Then

gbxy等于Int(x)*b*a/Abs(a)

Else

gbxy等于Round(a/b,0)*b

EndIf

CaseElse

gbxy等于Round(a/b,0)*b

EndSelect

Endfunction

输入完毕后,选择“文件”菜单中的“关闭并返回到Microsoftexcel”命令,代码即被保存,函数编写完成.

这样,可以和excel自带的函数一样使用国标修约gbxy函数了,例如拟修约A1单元格,修约至5,可在某单元格输入等于gbxy(A1,5),修约至0.2,则在单元格输入等于gbxy(A1,0.2),本函数适用于正负数的修约以及0.2和0.5单位修约的情况,完全能够满足GB/T8170-2008数值修约的要求.

6.结语

经过测试自编函数及自定义VBA函数满足标准的要求,实现了数字的修约.自编函数虽然代码比较长,看起来比较烦,用起来相对自定义VBA函数比较不方便,但是把修约至的数Y设置成某单元格如A2,对于拟修约数字较少,特别是Y值非1手工修约比较麻烦的情况下,辅助验证手工修约非常方便,有助于数据的校核验证.