使用new BigDecimal(double val)对doubel进行转换会导致转换后精度丢失
原因
BigDecimal的构造函数public BigDecimal(double val)会损失了double 参数的精度。jdk中已经明确不建议使用new BigDecimal(double value)这种形式的构造函数,而是使用new BigDecimal(Stringvalue) 或BigDecimal.valueof( double value)。
测试代码
for (int i = 1; i < 100; i++){
String str = i < 10? "0.0" + i: "0." + i;
BigDecimal b1 = BigDecimal.valueOf(Double.valueOf(str));
BigDecimal b2 = new BigDecimal(Double.valueOf(str));
System.out.println("new BigDecimal(double val): " + b1 + " " + b1.doubleValue() + " " + Double.valueOf(str));
System.out.println("-----------------------");
System.out.println("BigDecimal.valueof(double value): " + b2 + " " + b2.doubleValue() + " " + Double.valueOf(str));
System.out.println("-----------------------");
}