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 可能会有所不同。
我的代码中遇到了奇怪的错误。
与
有关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 可能会有所不同。