蒲公英 - 制药技术的传播者 GMP理论的实践者

搜索
查看: 6622|回复: 33
收起左侧

[日常管理] 在Excel中实现四舍六入五成双修约的几种方法及问题

  [复制链接]
药徒
发表于 2019-2-21 16:50:38 | 显示全部楼层 |阅读模式

欢迎您注册蒲公英

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 武汉点风科技 于 2019-2-21 16:58 编辑

    数值修约规则是指在进行具体的数字运算前或计算出结果后,通过省略原数值的最后若干位数字,调整保留的末位数字,使最后所得到的值最接近原数值的过程。指导数字修约的具体规则被称为数值修约规则。

    进行数值修约时应首先确定修约间隔(修约值的最小数值单位)和进舍规则。一经确定,修约值即为修约间隔的整数倍。然后指定表达方式,即选择根据修约间隔保留到指定位数。最后我们需要注意的是应该一步到位修约,而不允许连续修约。

    目前广泛使用的数值修约规则主要有四舍五入和四舍六入五成双。

    四舍五入往往是人们习惯采用的一种数值修约规则,其具体使用方法是:在需要保留数字的位次后一位,逢四及以下就舍,逢五及以上就进。Excel这款广泛使用的软件在处理数据时默认采用的就是四舍五入修约规则。

    当然四舍五入修约规则,逢五就进,必定会造成结果的系统性偏高,误差偏大。为了避免这样的状况出现,尽量减小因修约而产生的误差,在医药工业等科技领域中,测定和计算各种数值时就需要用到更为科学的修约规则。

    《中国药典2015年版四部凡例中明确说明试验结果在运算过程中,可比规定的有效数字多保留一位,而后根据有效数字的修约规则进舍至规定有效位。计算所得的最后数值或测定读数值均可按修约规则进舍至规定的有效位,取此数值与标准中规定的限度数值比较,以判断是否符合规定的限度。这里的修约规则遵循中国国家标准文件GB/T 8170—2008《数值修约规则与极限数值的表示和判定》,即四舍六入五成双。

    四舍六入五成双修约规则与四舍五入修约规则有些许差异,当被修约的数字小于或等于四时,就直接舍去;当被修约的数字大于或等于六时,则向前进一位;当被修约的数字等于五时,需要看五前面的数字,如果是偶数就将五舍去,如果是奇数则进一位,即修约后末尾数都为偶数,而当五的后面还有不为零的任何数时,则无论五的前面是奇数还是偶数,均应进位。由此可见,四舍六入五成双与四舍五入只是在被修约的数字等于五,且其前面是偶数时修约方式不一致,在其它情况下修约方式均完全一致。

    所以当Excel这款通用软件应用于医药工业中时,其自身默认的四舍五入修约规则与中国药典中所规定的四舍六入五成双修约规则有所出入,不能完全符合中国药典的要求。

    那么制药企业如何让Excel在日常使用中实现四舍六入五成双修约规则呢?

    我们知道在Excel中可以运用ROUND函数按指定的位数对数值进行四舍五入,ROUNDDOWN函数按指定的位数向下舍入数字,ROUNDUP函数按指定的位数向上舍入数字。因此可以通过将其与IF等函数进行嵌套实现四舍六入五成双的函数算法,一个较为简洁的公式是:=IF(MOD(ABS(X*POWER(10,Y)),2)=0.5,ROUNDDOWN(X,Y),ROUND(X,Y))。其中,X为待修约的原始数值;Y为保留位数,可以为正值、零和负值,如+1表示进位到0.1-2表示进位到100位,0表示进位到整数位。

    下面进行解释,POWER10Y)函数表示进行10Y次方乘幂运算,ABS函数返回给定数值(乘幂运算结果)的绝对值,MOD函数返回两数(上述绝对值与2)相除的余数,如果余数是0.5说明被修约数值的尾数等于五,且其前面的数是偶数)则返回ROUNDDOWN(X,Y),即将待修约数值XY保留位数向下舍入;如果余数不是0.5则返回ROUND(X,Y),即将待修约数值XY保留位数进行四舍五入。

    以一组实际数据为例,需要计算样品两次pH值测定结果的平均值,保留两位小数,直接运用AVERAGE函数即可,Excel默认的四舍五入修约规则得到的结果如下图所示:

1.png


    而套用上述四舍六入五成双函数公式,以E3单元格为例,将X替换为AVERAGE(C33),Y替换为2,其它单元格以此类推,得到四舍六入五成双修约结果如下图所示

2.png


    我们发现两张图中E4单元格计算结果不一样,因为5.565.57的平均值5.565取两位小数如按四舍五入修约得5.57,而四舍六入五成双修约得5.56

    当然我们也发现计算公式大为增长了,这还只是一个求平均值的简单计算,如果是其它更为复杂的计算,上述公式中的X还需要进行更多的嵌套。那么除函数方法外,还有没有其它更加简洁的方法实现四舍六入五成双修约呢?

    答案是肯定有的,一种常见的利用VBA编写自定义函数的方式:

Function TranValue(rng As Double, number As Integer) As Double

  TranValue = Round(rng,number)

End Function

    函数编写完,就可以在Excel工作表中引用TranValueX,Y)该函数。其中,X为待修约的原始数值;Y为保留位数。

    输入一组数据,以E3单元格为例,XAVERAGE(C33),Y2,其它单元格以此类推,得到四舍六入五成双修约结果如下图所示

3.png


    仔细观察,E3单元格计算结果0.545按四舍六入五成双修约应为0.54,为什么是0.55呢?但E5单元格计算结果0.565修约为0.56又是正确的,这又是什么原因呢?

    不难看出,Excel中这种常见的运用宏命令实现四舍六入五成双修约的方法是存在缺陷的。因为计算机是基于二进制的,我们需要在代码中增加一个CDec转换函数,将双精度浮点型数据转换为十进制型,修改后的VBA代码如下图所示:

4.png


    这样在输入同样的数据后,四舍六入五成双修约结果才完全正确,如下图所示:

5.png


    小编此番讲解希望对制药同仁们有所启示与帮助,毕竟数据修约不当会影响到产品质量数据与极限数值的判定。

    利用Excel能为提高工作效率带来立竿见影的效果,投入成本低,适应性强。实验室的信息化与自动化可以从Excel开始。eInfotree软件能弥补ExcelGxP领域合规性上的差距,实现Excel的用户访问控制,审计追踪,电子签名,完全符合CFR21 Part11的要求,让制药企业无顾虑地享用电子表格带来的便利。


文章转自微信公众号:实验室信息化与自动化

回复

使用道具 举报

发表于 2019-2-21 16:52:26 | 显示全部楼层
学习了,学习
回复

使用道具 举报

药士
发表于 2019-2-21 17:21:02 | 显示全部楼层
回复

使用道具 举报

发表于 2019-2-21 18:56:32 | 显示全部楼层
厉害了!学习学习!!多谢分享!!!
回复

使用道具 举报

药徒
发表于 2019-2-21 23:49:47 | 显示全部楼层

厉害了!学习学习!
回复

使用道具 举报

药徒
发表于 2019-2-22 08:34:00 | 显示全部楼层
利用逻辑公式克服浮点误差的方式多种多样,具体怎么做都行
回复

使用道具 举报

药徒
发表于 2019-2-22 13:50:47 | 显示全部楼层
谢谢分享谢谢分享。
回复

使用道具 举报

药徒
 楼主| 发表于 2019-2-22 16:05:33 | 显示全部楼层
zfamous 发表于 2019-2-22 08:34
利用逻辑公式克服浮点误差的方式多种多样,具体怎么做都行

是的,所以文中的函数公式只是其中一种较为简洁的解决方式。
回复

使用道具 举报

药徒
发表于 2019-2-23 10:48:40 | 显示全部楼层
学习了,谢谢分享。
回复

使用道具 举报

药徒
发表于 2019-2-23 11:35:52 | 显示全部楼层
回复

使用道具 举报

药生
发表于 2019-2-23 12:29:03 | 显示全部楼层
迟疑了一下,我发现自己还是看不懂
回复

使用道具 举报

药仙
发表于 2019-2-23 12:47:41 | 显示全部楼层
学习一下了
回复

使用道具 举报

药士
发表于 2019-2-25 09:03:15 | 显示全部楼层
学习学习!!
回复

使用道具 举报

发表于 2019-2-25 14:47:12 | 显示全部楼层
学习了,谢谢分享!!
回复

使用道具 举报

药徒
发表于 2019-2-25 18:51:36 | 显示全部楼层

学习了,谢谢分享!!
回复

使用道具 举报

药徒
发表于 2019-2-26 08:48:47 | 显示全部楼层
之前一直在想办法编个公式解决Excel四舍六入五成双,虽然也能做到,但太繁琐了,感谢楼主分析,学习了
回复

使用道具 举报

药徒
发表于 2019-2-26 14:47:04 | 显示全部楼层
厉害了!学习学习!!多谢分享!!!
回复

使用道具 举报

药徒
发表于 2019-2-26 16:44:39 | 显示全部楼层
回复

使用道具 举报

药徒
发表于 2019-2-26 22:50:24 来自手机 | 显示全部楼层
非常实用的分享,谢谢楼主
回复

使用道具 举报

药徒
发表于 2019-2-27 09:22:39 | 显示全部楼层
很实用的知识,感谢分享啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

×发帖声明
1、本站为技术交流论坛,发帖的内容具有互动属性。您在本站发布的内容:
①在无人回复的情况下,可以通过自助删帖功能随时删除(自助删帖功能关闭期间,可以联系管理员微信:8542508 处理。)
②在有人回复和讨论的情况下,主题帖和回复内容已构成一个不可分割的整体,您将不能直接删除该帖。
2、禁止发布任何涉政、涉黄赌毒及其他违反国家相关法律、法规、及本站版规的内容,详情请参阅《蒲公英论坛总版规》。
3、您在本站发表、转载的任何作品仅代表您个人观点,不代表本站观点。不要盗用有版权要求的作品,转贴请注明来源,否则文责自负。
4、请认真阅读上述条款,您发帖即代表接受上述条款。

QQ|手机版|蒲公英|ouryao|蒲公英 ( 京ICP备14042168号-1 )  增值电信业务经营许可证编号:京B2-20243455  互联网药品信息服务资格证书编号:(京)-非经营性-2024-0033

GMT+8, 2024-11-24 10:04

Powered by Discuz! X3.4运维单位:苏州豚鼠科技有限公司

Copyright © 2001-2020, Tencent Cloud.

声明:蒲公英网站所涉及的原创文章、文字内容、视频图片及首发资料,版权归作者及蒲公英网站所有,转载要在显著位置标明来源“蒲公英”;禁止任何形式的商业用途。违反上述声明的,本站及作者将追究法律责任。
快速回复 返回顶部 返回列表