我知道在 Java 中将 BigDecimal 值转换为 Double 时存在“精度问题”。使用 BigDecimal.doubleValue() 简单地从 BigDecimal 转换为 Double 时,何时会出现“数据丢失”?例如,如果我将 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 - Java中BigDecimal转Double时什么时候出现 "data loss",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50013731/