BigDecimal stripTrailingZeros不适用于零

gst*_*low 9 java bigdecimal

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

它涉及到

new BigDecimal("1.2300").stripTrailingZeros() 
Run Code Online (Sandbox Code Playgroud)

返回1.23(正确)

new BigDecimal("0.0000").stripTrailingZeros() 
Run Code Online (Sandbox Code Playgroud)

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

为什么?

怎么解决?

Yur*_*uri 13

似乎这是一个错误.但它在Java 8中得到修复.修复的直接URL .

有解决方法:

BigDecimal zero = BigDecimal.ZERO;
if (someBigDecimal.compareTo(zero) == 0) {
    someBigDecimal = zero;
} else {
    someBigDecimal = someBigDecimal.stripTrailingZeros();
}
Run Code Online (Sandbox Code Playgroud)

请参阅此链接.

霍尔格在评论中也是一个好点

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

  • 不要浪费资源创建自己的零实例.使用[`BigDecimal.ZERO`](http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html#ZERO) (4认同)
  • @gstackoverflow我已经更新了答案:) (2认同)
  • @JordiCastilla OP询问标准库函数的意外行为,Yuri提供了一个答案,消息来源它是标准库中的一个错误.这怎么不是答案? (2认同)