在 Java 中从 BigDecimal 转换为 Double 时什么时候有 "data loss"

When is there "data loss" when converting from BigDecimal to Double in Java

我知道在 Java 中将 BigDecimal 值转换为 Double 时有 "precision issues"。使用 BigDecimal.doubleValue() 简单地从 BigDecimal 转换为 Double 时什么时候有 "data loss"?例如,如果我将 1.1 从 BigDecimal 转换为 Double 并将其打印出来,它会打印“1.1”,我认为没有数据丢失(BigDecimal 为 1.1,打印值为 1.1)。以这种方式简单地从 BigDecimal 转换为 Double 时,这两个值何时会不相同?

BigDecimal 有你喜欢的精度。 double 具有 53 位二进制精度,即 ~15.9 位十进制数字。因此,只要您的 BigDecimal 有 > 16 个有效数字,您就会在转换为 double.

时丢失精度

[这是对整数值的引用。分数的情况要复杂得多,但事实是 BigDecimal 具有无限精度,而 double 则没有。]

double 也有最小值和最大值,由 Double.MIN_VALUE/MAX_VALUE 给出。 BigDecimal两者都没有。