问题
I have met strange bug in my code.
It relates with
new BigDecimal("1.2300").stripTrailingZeros()
returns 1.23
(correct)
but
new BigDecimal("0.0000").stripTrailingZeros()
returns 0.0000
(strange), thus nothing happens
Why?
How to fix it?
回答1:
Seems that it is a bug. But it is fixed in Java 8. Direct URL for fix.
There is workaround for this:
BigDecimal zero = BigDecimal.ZERO;
if (someBigDecimal.compareTo(zero) == 0) {
someBigDecimal = zero;
} else {
someBigDecimal = someBigDecimal.stripTrailingZeros();
}
Please refer to this link.
Also good point from Holger in comments
Don’t waste resources creating your own zero instance. Use BigDecimal.ZERO.
回答2:
Here's the Javadoc for that method, which certainly suggests that isn't the intended behaviour, but isn't conclusive: http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#stripTrailingZeros()
Exactly why it isn't doing this is down to the implementation then. Which JDK are you using? For OpenJDK, we can see the source to figure out how it's reaching this conclusion, but other JDKs may differ.
来源:https://stackoverflow.com/questions/34414785/bigdecimal-striptrailingzeros-doesnt-work-for-zero