银行家舍入法

在金融行业中,每一分钱的计算都十分重要,使用传统的“四舍五入”来计算金额时,会造成不精确不公正,而银行家舍入法时一种更精确更公平的解决方案。本文通过对比来介绍两者差异。

四舍五入

假如目前有这么十笔金额,银行需要进行保留两位小数,1.000、1.001、1.002、1.003、1.004、1.005、1.006、1.007、1.008、1.009。

  • 那么1.000、1.001、1.002、1.003、1.004使用四舍五入后都会变成 1.00,舍去的部分之和为 0.000 + 0.001 + 0.002 + 0.003 + 0.004 = 0.01,这一部分舍去的相当于银行的“节省”。
  • 1.005、1.006、1.007、1.008、1.009 使用四舍五入后都会变成 1.01,而为了进位所补的和为 0.005 + 0.004 + 0.003 + 0.002 + 0.001 = 0.015,可以发现每十笔银行会多补 0.005,当样本足够大的时候,累计的钱也将不容忽视。
    上面这个例子揭示了在银行页中的不平衡性。

什么是银行家舍入法

银行家舍入法是一种特殊的四舍五入方法,又称为四舍六入五取偶或四舍六入五留双,特别适用于金融和编程领域,可以在大量多次舍入操作中减少累计误差。其基本规则为:

  1. 当需舍弃数小于 5 时,则舍去。
  2. 当需舍弃数大于 5 时,则进位。
  3. 当需舍弃数等于 5 时,分情况讨论:
    • 如果 5 后面有数字(不包括 0),则进位。
    • 如果 5 后面没有数字或者数字为 0,则看 5 前面的数字,数字如果是奇数则进位,是偶数则舍去。

银行家舍入法与四舍五入法区别在于前者将比较的数从 0-9 扩展到 0-99,当大于50时则进位,小于50则舍去,对于50则比对前面一位数的奇偶,而前面数字的奇偶出现的概率是近乎相等的,这种方案更公平也更精确。

1
2
3
4
5
1.0045 => (4后有数字则不补0) 1.0045 => (45小于50,则舍去) 1.00
1.004 => (4后无数字则补0) 1.0040 => (40小于50,则舍去) 1.00
1.0052 => (5后有数字则不补0) 1.0052 => (52大于50,则进位) 1.01
1.005 => (5后无数字则补0) 1.0050 => (50等于50,50前的数字为0,为偶数则舍去) 1.00
1.015 => (5后无数字则补0) 1.0150 => (50等于50,50前的数字为1,为奇数则进位) 1.02