Running this simple program:
public static void main(final String... args) { System.out.println(BigDecimal.ZERO.scale()); System.out.println(new BigDecimal("0").scale()); System.out.println(new BigDecimal("0.0").stripTrailingZeros().scale()); System.out.println(new BigDecimal("1.0").stripTrailingZeros().scale()); }
outputs:
0 0 1 0
My question is rather simple: why doesn't the third println
output 0
? That would seem logical...
EDIT: OK, so, this is a very old bug:
Bug Link
and in fact, it "works" for any number of zeroes: new BigDecimal("0.0000").stripTrailingZeroes().scale()
is 4!
In fact "0.0" is the exception as it does no stripTrailingZeroes. A bug!
public static void main(final String... args) { p("0"); p("0.0"); p("1.0"); p("1.00"); p("1"); p("11.0"); } private static void p(String s) { BigDecimal stripped = new BigDecimal(s).stripTrailingZeros(); System.out.println(s + " - scale: " + new BigDecimal(s).scale() + "; stripped: " + stripped.toPlainString() + " " + stripped.scale()); } 0 - scale: 0; stripped: 0 0 0.0 - scale: 1; stripped: 0.0 1 1.0 - scale: 1; stripped: 1 0 1.00 - scale: 2; stripped: 1 0 1 - scale: 0; stripped: 1 0 11.0 - scale: 1; stripped: 11 0
Fixed in Java 8! See @vadim_shb's comment.