Why does new BigDecimal(“0.0”).stripTrailingZeros() have a scale of 1?

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

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!

回答1:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!