TVB在用Excel时,用到了其中的VBA。在编程时,发现了一件奇怪的事情。
VBA中的舍入,竟然不是四舍五入。2.5的结果居然是2,我直接就蒙圈了。
然后上网各种搜索,才知道这种四舍五入的方法叫——银行家舍入法。
❖四舍五入❖
四舍五入,我们都很了解,当一位数后面的数字是4或4以下就舍去;如果是5或5以上就入。
0.4舍去就变成了0,0.5入上就变成了1。
表面上看,0-4共5个数,5-9共5个数,分别舍去和进一,感觉很平衡。
但仔细想想,需要舍入的数为0时,舍后就是这个数本身,这种情况应该排除。
而0-9共9个数,5处于中间,如果5-9都进一,进一的概率是九分之五,而1-4舍去,概率是九分之四,这样就失去了平衡。
四舍五入法中。舍去的概率是九分之四,上入的概率是九分之五,这显然是并不公平的。
❖银行家舍入法❖
➤4舍6入
银行家舍入法的原则是:
四舍六入五考虑,五后非零就进一,
五后为零看奇偶,五前为偶应舍去,五前为奇要进一
仔细研究了一下,原来银行家舍入法是——四舍六入。
银行家舍入法➤5向前看
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
所以,银行家舍入法是:
4舍6入5看前,偶5舍,奇5入
银行家舍入法➤银行家舍入法更公平
当数字是0时,本质上是没有变化的。是没有舍入这件事。
当数字是1-4时,舍去;
当数字是6-9时,上入;
当偶数后面是5时,舍去;
当奇数后面是5时,上入。
这样舍去和上去的概率分别是50%,这样就变得更加公平了。
❖写在最后❖
难怪这个方法叫银行家舍入法,银行家果然是锱铢必较呀。
以银行利息为例:
银行家舍入法可以看出,在尾数是5的情况下,使用四舍五入法,我们可以多收利息。
可是在银行家舍法情况下,我们交的才是更公平的手续费。
其实,大部分编程语言使用的都是银行家舍入法,比如我们最常见的Python也是如此。
估计程序员们也只是调用了内建函数,具体这个舍入是如何舍入的,恐怕程序员自己也未必非常清楚了哈哈。
可以肯定的是:
在我们付费时,银行家舍入法对我们更有利,如上面表格中手续费的例子。
而在我们赚钱时,四舍五入对我们更有利,我们可以在尾数是5时赚到更多。
不要小看这小数点后几位的这点小钱,这些小钱加在一起,长期积累下来,可不是一点小钱。也许,就是这种锱铢必较积累,才是银行家和大佬们财富积累的方式之一:)
网友评论