分享

【20190125】- ExcelVBA中四舍五入的套路

 L罗乐 2019-01-28

大家好,我是中药党。

 

在VBA中,有一个和大家日常习惯不太一样的操作,那就是“四舍五入”Round函数,为啥四舍五入要加引号,那是因为VBA中的Round并不是简单采取四舍五入的计算方法。


 

在VBA以及很多计算机语言中,Round函数都是采用“银行家舍入”算法,是一种比较精确比较科学的计数保留法,即四舍六入五取偶

 

具体规则用度娘的话说是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一

 

用一组例子来看一下这Round的银行家算法




虽然这样的规则更加精确和科学,但有时在一般业务上,符合常用的“四舍五入”习惯则更容易令我们接受。

 

利用以下两种方法可以避免这种“银行家算法”,而让我们使用容易接受的“四舍五入”: 

一、增加一个极小值

给需要进行舍入的数值进行修正,在做舍入操作前,加上一个极小值后再做Round,就相当于是对原数值的四舍五入,比如编写一个自定义函数来代替VBA内置的Round函数,代码如下:



VBA允许使用相同名称的自定义函数重写大多数的内置函数,内置函数被重写之后,以非限定方式引用的该函数名称将为对自定义函数的调用。此时如果要调用内置函数,则必须使用完整的引用方式(在函数名称的前边冠以包含类型库的限定方式)

 

用一个过程调用自定义函数如下:


二、用工作表函数Round

可以用工作表函数Round替代VBA内置的Round函数,工作表函数Round与VBA内置的Round函数的用法相同,但是它采用的是四舍五入而不是”银行家算法”。例如,需要对数值进行四舍五入运算时,使Application.WorkbookFunction.Round来替代



在过程中调用自定义函数如下:



看完上边这几个例子,小伙伴们也一定明白了怎么实现“银行家算法”以及在VBA中如何实现“四舍五入”的算法了。当然只能说银行家算法比四舍五入更科学,而不能说它就是绝对正确,而四舍五入就是错误的,在实际工作中,请小伙伴们也根据具体情况区分使用吧。


猜您喜欢

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多