1 为什么double不精确

计算机是没办法用二进制精确的表示0.1的。

2 BigDecimal是如何保证精确的

一个BigDecimal是通过一个”无精度值“和一个”精度“来表示一个数的。

3 BigDecimal(double)有什么问题

当使用 new BigDecimal(0.1)创建一个 BigDecimal 的时候,其实创建出来的值并不是正好等于 0.1 的。而是 0.1000000000000000055511151231257827021181583404541015625。使用 BigDecimal(double) 来创建一个 BigDecimal 的话,那么是损失了精度的,这是极其严重的。

new BigDecimal(“0.10000”)和 new BigDecimal(“0.1”)这两个数的标度分别是 5 和 1,如果使用 BigDecimal 的 equals 方法比较,得到的结果是 false。