BigDecimal stripTrailingZeros 不适用于零

BigDecimal stripTrailingZeros doesn't work for zero

我的代码中遇到了奇怪的错误。

有关
new BigDecimal("1.2300").stripTrailingZeros() 

returns 1.23(正确)

但是

new BigDecimal("0.0000").stripTrailingZeros() 

returns 0.0000(奇怪),所以什么也没有发生

为什么?

如何解决?

这似乎是一个 bug (JDK-6480539) which was fixed in Java 8 (per OpenJDK commit 2ee772cda1d6)。

Java 早期版本的解决方法:

BigDecimal zero = BigDecimal.ZERO;
if (someBigDecimal.compareTo(zero) == 0) {
    someBigDecimal = zero;
} else {
    someBigDecimal = someBigDecimal.stripTrailingZeros();
}

这是该方法的 Javadoc,它肯定表明这不是预期的行为,但不是决定性的: http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#stripTrailingZeros()

它不这样做的确切原因取决于实施。您正在使用哪个 JDK?对于 OpenJDK,我们可以看到 source 来弄清楚它是如何得出这个结论的,但其他 JDK 可能会有所不同。