【发布时间】:2018-10-05 10:13:56
【问题描述】:
我知道在 Java 中将 BigDecimal 值转换为 Double 时存在“精度问题”。使用 BigDecimal.doubleValue() 简单地将 BigDecimal 转换为 Double 时,何时会出现“数据丢失”?例如,如果我将 1.1 从 BigDecimal 转换为 Double 并打印出来,它会打印“1.1”,我认为这不会丢失数据(BigDecimal 为 1.1,打印值为 1.1)。以这种方式简单地将 BigDecimal 转换为 Double 时,这两个值在什么情况下会不一样?
【问题讨论】:
-
如果在打印时选择更高的精度,你会看到双精度非常接近,但不完全是 1.1,因为二进制浮点数不能精确表示 1.1,而 BigDecimal 可以。所以会有精度损失。 double 只有有限的位数,而 BigDecimal 几乎是无限的位数这一事实也应该是一个提示。
标签: java string double converter bigdecimal