Java BigDecimal精度问题
我知道以下行为是一个老问题,但我仍然不明白。
System.out.println(0.1 + 0.1 + 0.1);
或者即使我使用 BigDecimal
System.out.println(new BigDecimal(0.1).doubleValue() + new BigDecimal(0.1).doubleValue()
+ new BigDecimal(0.1).doubleValue());
为什么这个结果是:0.30000000000000004
而不是:0.3
?
我该如何解决?
回答:
你真正想要的是
new BigDecimal("0.1") .add(new BigDecimal("0.1"))
.add(new BigDecimal("0.1"));
该new
BigDecimal(double)构造得到的所有的不精确性double
,所以由你说的时候0.1
,你已经引入了舍入误差。使用String
构造函数可避免与通过导致的舍入错误double
。
以上是 Java BigDecimal精度问题 的全部内容, 来源链接: utcz.com/qa/404974.html