我的代码中遇到了一些奇怪的错误。
与
有关new BigDecimal("1.2300").stripTrailingZeros()
返回1.23
(正确)
但是
new BigDecimal("0.0000").stripTrailingZeros()
返回0.0000
(奇怪),因此没有任何反应
为什么呢?
如何解决?
答案 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可能会有所不同。