java - Java中BigDecimal转Double时什么时候出现 "data loss"

标签 java string double converters bigdecimal

我知道在 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/

相关文章:

java - 在 Main 方法中使用返回的数组

java - 我的合并排序实现中的运行时错误

Java 扫描器计算文件中的行数

linux - 从左侧和右侧删除文本并将字符串保留在中间

VB.NET 将 double 值转换为字符串 = 精度损失

java - 解析没有尾数和指数分隔符的 double

java - 使用 jquery 根据 servlet 的结果更改 div 背景颜色

string - 为 HashMap<_, String> 返回默认 &str

Java 按唯一索引号对值进行排序

Java 和 double 的大小