运行这个简单的程序:
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 :(得分:8)
实际上“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的评论。