我知道在Java中将BigDecimal值转换为Double时存在“精度问题”。当使用BigDecimal.doubleValue()从BigDecimal转换为Double时,何时出现“数据丢失”?例如,如果我将1.1从BigDecimal转换为Double并将其打印出来,则打印出“1.1”,我认为没有数据丢失(BigDecimal为1.1,打印值为1.1)。在这种情况下,这两个值在以这种方式简单地从BigDecimal转换为Double时会不一样?
答案 0 :(得分:2)
BigDecimal
具有您想要的精度。 double
具有53位二进制精度,即~15.9十进制数。因此,只要您BigDecimal
有>转换为double
时,你所处的16位有效数字(精确度)。
[这是对整数值的引用。分数的情况要复杂得多,但事实仍然是BigDecimal
在double
没有的情况下具有无限精度。]
同样,double
具有最小值和最大值,由Double.MIN_VALUE/MAX_VALUE
给出。 BigDecimal
没有。