Search code examples
javabigdecimal

BigDecimal stripTrailingZeros doesn't work for zero


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?


Solution

  • Seems that this is a bug (JDK-6480539) which was fixed in Java 8 (per OpenJDK commit 2ee772cda1d6).

    Workaround for earlier versions of Java:

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