BigDecimal stripTrailingZeros不适用于零

时间:2015-12-22 11:23:37

标签: java bigdecimal

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

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

返回1.23(正确)

但是

new BigDecimal("0.0000").stripTrailingZeros() 

返回0.0000(奇怪),因此没有任何反应

为什么呢?

如何解决?

2 个答案:

答案 0 :(得分:12)

似乎是错误。但它已在 Java 8 中修复。 fix的直接网址。

有解决方法:

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

请参阅此link

评论中的Holger也很好点

  

不要浪费资源创建自己的零实例。使用BigDecimal.ZERO

答案 1 :(得分:0)

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

究竟为什么它没有做到这一点取决于实施。您使用的是哪个JDK?对于OpenJDK,我们可以看到source来弄清楚它是如何得出这个结论的,但其他JDK可能会有所不同。