Why does new BigDecimal("0.0").stripTrailingZeros() have a scale of 1?
bigdecimal, java
Solution
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.
Problem
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!