博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

round函数——银行家舍入算法

Posted on 2013-09-05 14:33  fourier的天空  阅读(1695)  评论(0编辑  收藏  举报

在处理四舍五入时,相信大部分人会使用math.round函数(不同的语言应该都有)。有没有考虑过,这个函数是不是自己所需要的?

po主碰到的问题是用来计算平均分。有个顶真的学生反映,明明是86.5,怎么显示86。经查,问题为使用round函数,86.5舍入后为86。以下转自百度百科:

银行家舍入

据 说大部分的编程软件都使用的是这种方法,也算是一种国际标准。 所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。其规则是:当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6 时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。
简单的说,就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
 
示例:Math.Round(3.5,0)=4
Math.Round(4.5,0)=4
 
 po主玩编程多年,第一次意识到此问题。瀑布寒阿。据说很多语言,包括vb等,都是使用此算法。简单的解决方法是在要处理的数字后+一个很小的数,比如0.0000000001。
另,po主的同事从来不用此函数,四舍五入用的是(int)(para+0.5)。似乎也可以。
 
后记:po主请教了从事财务工作的同事和家属,都从未见识过此舍入算法。看来主要还是用于编程语言。