美文网首页
BigDecimal初始化精度问题

BigDecimal初始化精度问题

作者: 雨中漫步的北极熊 | 来源:发表于2017-11-30 17:24 被阅读163次
    BigDecimal初始化问题
           最近使用BigDecimal在订单金额结算时出现的精度问题,查询资料才发现原因
    
    代码如下
      BigDecimal b1=new BigDecimal(52.165);
      BigDecimal b2=BigDecimal.valueOf(52.165);
      System.out.println(b1+"==="+b2);
    
    输出结果如下
       52.16499999999999914734871708787977695465087890625===52.165
    

    查询资料发现BigDecimal.valueOf(double) 初始化数据是把Double.toString(double)方法提供的规范的字符串表示形式将double转换为BigDecimal

    而new BigDecimal(double)中是将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式,也就是说使用new方式的初始化会出现精度缺失
    而使用valueOf()方式初始化就不会出现精度缺失

    相关文章

      网友评论

          本文标题:BigDecimal初始化精度问题

          本文链接:https://www.haomeiwen.com/subject/xttbbxtx.html