在 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
两者都没有。
我知道在 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
两者都没有。