计算机是没办法用二进制精确的表示0.1的。
一个BigDecimal是通过一个”无精度值“和一个”精度“来表示一个数的。
当使用 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。