银行家舍入法——四舍五入的小气鬼方法

tvb(65)
Published in
#busy
Words
728
Reading
4 min
Listen
Play
9y

这几天我在重写“三好兔噢”活动统计的程序,暂时在excel里写的,自然用到了VBA,其中要使用参与人数除以10再四舍五入,来确定幸运奖的名额,无意中发现在VBA里,2.5四舍五入的结果居然是2,我直接就蒙圈了。

然后上网各种搜索,才知道这种四舍五入的方法叫——银行家舍入法。


银行家舍入法的原则是:

四舍六入五考虑,五后非零就进一,
五后为零看奇偶,五前为偶应舍去,五前为奇要进一


仔细研究了一下,原来银行家舍入法是——四舍六入。

1.jpg

5呢?看情况:

如果5后面的数字如果不是0,就入上去,1.59 2.55 3.51 分别向上入,为2 3 4。这我能理解,因为5是一个从0到9处于中间位置的数,如果5后面多一点点,这个数都是向右偏移的,当然是向上入。按这个原理,我试了一下round(1.50001)和round(2.500001)结果果然分别是2和3。

如果5后面的数字是0,就看5前面的数字,如果5前面是奇数,就进一,如果5前面是偶像就舍取。

round(1.5) round(3.5) round(5.5) round(7.5) round(9.5) 结果分别是2 4 6 8 10
round(0.5) round(2.5) round(4.5) round(6.5) round(8.5)结果分别是0 2 4 6 8


表面上看,0-4共5个数,5-9共5个数,分别舍去和进一,感觉很平衡。

但仔细想想,需要舍入的数为0时,舍后就是这个数本身,这种情况应该排除。而0-9共9个数,5处于中间,如果5-9都进一,进一的概率是九分之五,而1-4舍去,概率是九分之四,这样就失去了平衡。所以按前一位的奇偶性来判断,从而使舍入的情况更平衡。


然而,我怎么办,如果有25个作品,我需要选择3名幸运奖,我总不能按银行家舍入法,25除以10等于2.5,整数为偶数则舍去5,这样就少了一个幸运奖名额。

好在参赛者是整数,除以10以后,小数点后只有一位,我把这个数加0.01,这样小数点后一位0-4和6-9时不受影响,而小数点后一位为5时,就可以进一。

也就是取round(n/10+0.01)

终于解决了这个问题。难怪这个方法叫银行家舍入法,银行家果然是锱铢必较呀。

话说phython也是使用银行家舍入法,各位程序员,你们发现了吗?

银行家舍入法——四舍五入的小气鬼方法 | Ecency