double转BigDecimal精度丢失的解决方案。

因为double有精度丢失的问题,所以关于小数点的计算通常使用BigDecimal来计算。 但直接调用BigDecimal的double构造函数,会出现精度丢失问题。

/**
  * BigDecimal传double的构造函数
  */
public BigDecimal(double val) {
          
   
        this(val,MathContext.UNLIMITED);
}

例子:

public class Demo1 {
          
   
    public static void main(String[] args) {
          
   
    //输出结果:4.79999999999999982236431605997495353221893310546875
        System.out.println(new BigDecimal(4.8));
    }
}

解决方案: 将double类型转为String类型就可以了。 调用的是BigDecimal的String构造函数。

public class Demo1 {
          
   
    public static void main(String[] args) {
          
   
        double d = 4.8;
        //输出结果:4.79999999999999982236431605997495353221893310546875
        System.out.println(new BigDecimal(d));
        //输出结果:4.8
        System.out.println(new BigDecimal(String.valueOf(d)));
    }
}
经验分享 程序员 微信小程序 职场和发展