编程技术分享平台

网站首页 > 技术教程 正文

银行家舍入法

xnh888 2025-02-09 14:40:34 技术教程 17 ℃ 0 评论

银行家舍入法(银行家算法),其实质是一种四舍六入五取偶(又称四舍六入五留双)法。
银行家舍入法是由IEEE 754标准规定的浮点数取整算法,大部分的编程软件都使用的是这种方法。 相较于四舍五入法,银行家舍入法舍入会更加精准。

具体计算规则

1、被修约的数字小于5时,该数字舍去;
2、被修约的数字大于5时,则进位;
3、被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。

优势

在对大量的数据进行舍入之后,银行家舍入相较于四舍五入会更精准、更公平。

银行家舍入法

舍入位

处理

例子(保留两位小数)

0-4

舍去

2.121->2.12

5(没有尾数)

前一位是偶数

舍去

2.125->2.12

前一位是奇数

进位

2.135->2.14

5(有尾数)

进位

2.1351->2.14

6-9

进位

2.127->2.13

BigDecimal支持

BigDecimal支持四舍六入银行家算法,使用
BigDecimal.ROUND_HALF_EVEN参数在构造BigDecimal传入即可实现

BigDecimal bigDecimal = new BigDecimal("2.115");
BigDecimal newBigDecimal = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(newBigDecimal.toString());  //输出2.12

BigDecimal bigDecimal = new BigDecimal("2.125");
BigDecimal newBigDecimal2 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(newBigDecimal2.toString());  //输出2.12

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表