关于BigDecimal.ROUND_HALF_EVEN银行家算法

我们知道四舍五入是有误差的:其误差值是舍入位的一半。我们以舍入运用最频繁的银行利息计算为例来阐述该问题。
我们知道银行的盈利渠道主要是利息差,从储户手里收拢资金,然后放贷出去,其间的利息差额便是所获得的利润。对一个银行来说,对付给储户的利息的计算非常频繁,人民银行规定每个季度末月的20日为银行结息日,一年有4次的结息日。而使用四舍五入的方法该银行就会大大亏本。

最近看书知道了这个算法银行家算法,这个算法在java5之后使用起来很简单,BigDecimal.ROUND_HALF_EVEN就可以得到,其算法的思想是:

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

 

在普通的项目中舍入模式不会有太多影响,可以直接使用Math.round方法,但在大量与货币数字交互的项目中,比如P2P,一定要选择好近似的计算模式,尽量减少因算法不同而造成的损失。

 

如果有问题或者建议请多提出交流         

you friend at CSND :)

你可能感兴趣的:(回味java基础,java,算法)