我在我的代码中遇到了奇怪的bug。
它与...有关。
new BigDecimal("1.2300").stripTrailingZeros()
返回1.23
(正确)
但是
new BigDecimal("0.0000").stripTrailingZeros()
返回 0.0000
(奇怪),因此什么也没有发生。
为什么?
如何修复?
我在我的代码中遇到了奇怪的bug。
它与...有关。
new BigDecimal("1.2300").stripTrailingZeros()
返回1.23
(正确)
但是
new BigDecimal("0.0000").stripTrailingZeros()
返回 0.0000
(奇怪),因此什么也没有发生。
为什么?
如何修复?
看起来这是一个错误(JDK-6480539),已在Java 8中修复(根据OpenJDK提交2ee772cda1d6)。
早期版本的Java的解决方法:
BigDecimal zero = BigDecimal.ZERO;
if (someBigDecimal.compareTo(zero) == 0) {
someBigDecimal = zero;
} else {
someBigDecimal = someBigDecimal.stripTrailingZeros();
}
BigDecimal stripped = blub.intValue() == 0 ? BigDecimal.ZERO : blub.stripTrailingZeros();
。 - TomBigDecimal.ZERO
。 - Holgernew BigDecimal("0")
替换为BigDecimal.ZERO
。你不需要引用我的名字。 - Holger这是该方法的Javadoc,它确实表明这不是预期的行为,但并不是最终结论: http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#stripTrailingZeros()
为什么会出现这种情况取决于具体实现。您使用的是哪个JDK?对于OpenJDK,我们可以查看源代码以确定它是如何得出这个结论的,但其他JDK可能会有所不同。
0
... 你能发布一个 MVCE 吗? - TomtoString()
将其打印为0.0000
吗? - Adam Michalik