JAVA 四舍六入

规则:
四舍六入五考虑,
五后非零就进一,
五后皆零看奇偶,
五前为偶应舍去,

五前为奇要进一。

为了避免四舍五入规则造成的结果偏高,误差偏大的现象出现,一般采用四舍六入五留双规则。

        // 1.当尾数小于或等于4时,直接将尾数舍去
        System.out.println("10.2731: " + new BigDecimal("10.2731").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 10.2731: 10.27
        System.out.println("18.5049: " + new BigDecimal("18.5049").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 18.5049: 18.50
        System.out.println("16.4005: " + new BigDecimal("16.4005").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 16.4005: 16.40
        System.out.println("27.1829: " + new BigDecimal("27.1829").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 27.1829: 27.18

        // 2.当尾数大于或等于6时将尾数舍去向前一位进位
        System.out.println("16.7777: " + new BigDecimal("16.7777").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 16.7777: 16.78
        System.out.println("10.29501: " + new BigDecimal("10.29501").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 10.29501: 10.30
        System.out.println("21.0191: " + new BigDecimal("21.0191").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 21.0191: 21.02

        // 3.当尾数为5,而尾数后面的数字均为0时,应看尾数“5”的前一位:若前一位数字此时为奇数,就应向前进一位;若前一位数字此时为偶数,则应将尾数舍去。数字“0”在此时应被视为偶数。
        System.out.println("12.6450: " + new BigDecimal("12.6450").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.6450: 12.64
        System.out.println("18.2750: " + new BigDecimal("18.2750").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 18.2750: 18.28
        System.out.println("12.7350: " + new BigDecimal("12.7350").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.7350: 12.74
        System.out.println("21.845000: " + new BigDecimal("21.845000").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 21.845000: 21.84

        // 4.当尾数为5,而尾数“5”的后面还有任何不是0的数字时,无论前一位在此时为奇数还是偶数,也无论“5”后面不为0的数字在哪一位上,都应向前进一位。
        System.out.println("12.73507: " + new BigDecimal("12.73507").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.73507: 12.74
        System.out.println("21.84502: " + new BigDecimal("21.84502").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 21.84502: 21.85
        System.out.println("12.64501: " + new BigDecimal("12.64501").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.64501: 12.65
        System.out.println("18.27509: " + new BigDecimal("18.27509").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 18.27509: 18.28
        System.out.println("38.305000001: " + new BigDecimal("38.305000001").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 38.305000001: 38.31
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值