美文网首页
除了四舍五入,还有一种银行家舍入法,你知道吗?

除了四舍五入,还有一种银行家舍入法,你知道吗?

作者: TVBee | 来源:发表于2019-09-22 14:25 被阅读0次

    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时赚到更多。

    不要小看这小数点后几位的这点小钱,这些小钱加在一起,长期积累下来,可不是一点小钱。也许,就是这种锱铢必较积累,才是银行家和大佬们财富积累的方式之一:)

    相关文章

      网友评论

          本文标题:除了四舍五入,还有一种银行家舍入法,你知道吗?

          本文链接:https://www.haomeiwen.com/subject/jctuuctx.html