银行家舍入法
在金融行业中,每一分钱的计算都十分重要,使用传统的“四舍五入”来计算金额时,会造成不精确不公正,而银行家舍入法时一种更精确更公平的解决方案。本文通过对比来介绍两者差异。
四舍五入
假如目前有这么十笔金额,银行需要进行保留两位小数,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,当样本足够大的时候,累计的钱也将不容忽视。
上面这个例子揭示了在银行页中的不平衡性。
什么是银行家舍入法
银行家舍入法是一种特殊的四舍五入方法,又称为四舍六入五取偶或四舍六入五留双,特别适用于金融和编程领域,可以在大量多次舍入操作中减少累计误差。其基本规则为:
- 当需舍弃数小于 5 时,则舍去。
- 当需舍弃数大于 5 时,则进位。
- 当需舍弃数等于 5 时,分情况讨论:
- 如果 5 后面有数字(不包括 0),则进位。
- 如果 5 后面没有数字或者数字为 0,则看 5 前面的数字,数字如果是奇数则进位,是偶数则舍去。
银行家舍入法与四舍五入法区别在于前者将比较的数从 0-9 扩展到 0-99,当大于50时则进位,小于50则舍去,对于50则比对前面一位数的奇偶,而前面数字的奇偶出现的概率是近乎相等的,这种方案更公平也更精确。
1 | 1.0045 => (4后有数字则不补0) 1.0045 => (45小于50,则舍去) 1.00 |