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

回到顶部