先看一段代码示例:

System.out.println(new BigDecimal(0.99));System.out.println(new BigDecimal("0.99"));System.out.println(BigDecimal.valueOf(0.99));System.out.println(new BigDecimal(Double.valueOf(0.99)));System.out.println(new BigDecimal(Double.valueOf(0.99).toString()));

输出结果如下:

0.98999999999999999111821580299874767661094665527343750.990.990.98999999999999999111821580299874767661094665527343750.99

可以看到new BigDecimal(double)类型时,小数的精度出现扩展。
总结:
如果使用new BigDecimal()时,尽可能转换为String,或者直接使用BigDecimal.valueof(double)