不注意会犯的BigDecimal的失误

项目中使用BigDeciaml类型处理数据时遇到了问题,这里记录下

关于BigDecimal的初始化,new BigDecimal(“0.00“)与new BigDecimal(0.00)的区别

首先看几个例子
eg1.

 		BigDecimal a = new BigDecimal("0.08");
        System.out.println(a.setScale(2, RoundingMode.UP)); //输出0.08
        BigDecimal b = new BigDecimal(0.08);
        System.out.println(b.setScale(2, RoundingMode.UP));  //输出0.09

eg2.

		BigDecimal a = new BigDecimal("0.00");
        BigDecimal b = new BigDecimal(0.00);
        System.out.println(a.equals(BigDecimal.ZERO));  //false
        System.out.println(b.equals(BigDecimal.ZERO));   // 输出true

new BigDecimal("0.00")new BigDecimal(0.00) 调用的构造函数是不一样的

new BigDecimal("0.00")调用的构造函数

   public BigDecimal(String val) {
        this(val.toCharArray(), 0, val.length());
    }

new BigDecimal(0.00)调用的构造函数

  public BigDecimal(double val) {
        this(val,MathContext.UNLIMITED);
    }

官方说明

在这里插入图片描述
官方建议

  1. 使用BigDecimal(String val)构造方法,此构造方法可预知,BigDeciaml(double val)构造方法不可预知
  2. 若一定要使用BigDecimal(double vale)构造方法,它提供了一个准确转换
  1. 先使用Double.toString(double) 方法
  2. 然后使用BigDecimal(String)构造方法,将double转换为String
    要获取该结果,请使用static valueOf(double)方法
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值