BigDecimal中使用ROUND_HALF_UP进行四舍五入

一、BigDecimal 简介
BigDecimal 类位于 java.math 包中,它提供了更加精确的算术运算,使用户完全控制舍入行为。 如果未指定舍入模式,并且无法表示确切的结果,则抛出异常; 否则,可以通过操作提供适当的 MathContext 对象来进行计算,以选择精度和舍入模式。虽然双精度浮点型变量 double 可以处理16位有效数,但在实际应用中可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字我们可以直接使用 Float 或 Double 处理,但是 Double.valueOf(String) 和Float.valueOf(String) 会丢失精度。如果我们需要精确计算的结果,则必须使用BigDecimal 类来操作。

【注】使用 BigDecimal 进行计算时,我们不能再使用算术运算符(+、-、*、/)进行算数运算,而是使用 BigDecimal 类提供的 add、subtract、multiply、divide 等方法来进行算数运算。

我们这篇讲讲小编在使用BigDecimal中使用ROUND_HALF_UP进行精度遇到的问题。
我们先看下面这段代码的输出:

        BigDecimal bigDecimal=new BigDecimal(3.845);
        System.out.println(bigDecimal);
        System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP));
        BigDecimal bigDecimal2=new BigDecimal(0.845);
        System.out.println(bigDecimal2);
        System.out.println(bigDecimal2.setScale(2,BigDecimal.ROUND_HALF_UP));

输出的结果:
在这里插入图片描述
我们可以看到,3.845四舍五入的结果是3.85,0.845四舍五入的结果是0.84。

原因:使用参数为float或double的BigDecimal创建对象会丢失精度。因此强烈建议不要使用参数为float或double的BigDecimal创建对象。
解决办法:

  1. 使用BigDecimal(String val)的构造方法创建对象
    new BigDecimal(“3.845”);
    new BigDecimal(“0.845”);
  2. 使用使用BigDecimal的valueOf(double val)方法创建对象
    BigDecimal.valueOf(3.845);
    BigDecimal.valueOf(0.845);
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值