为什么新的BigDecimal(“0.0”)。stripTrailingZeros()的比例为1?

运行这个简单的程序:

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()); } 

输出:

 0 0 1 0 

我的问题很简单:为什么第三个println没有输出0 ? 那似乎合乎逻辑……

编辑 :好的,所以,这是一个非常古老的错误:

错误链接

事实上,它“适用于”任意数量的零: new BigDecimal("0.0000").stripTrailingZeroes().scale()是4!

实际上“0.0”是例外,因为它没有stripTrailingZeroes。 一个错误!

 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 

在Java 8中修复! 请参阅@ vadim_shb的评论。