This question already has an answer here:
Why does new BigDecimal(“0.0”).stripTrailingZeros() have a scale of 1?
                                
                                    (1个答案)
                                
                        
                                5年前关闭。
            
                    
我想从BigDecimal中删除所有尾随零,然后打印出来。但是,trailingZeros方法无法按预期的那样工作。

BigDecimal a = new BigDecimal("-11111111111111111111111111111111111111.111111111111111111111111111111");
BigDecimal b = new BigDecimal("11111111111111111111111111111111111111.111111111111111111111111111111");
BigDecimal c = a.add(b);
System.out.println(c);
System.out.println(c.toPlainString());
c = c.stripTrailingZeros();
System.out.println(c);
System.out.println(c.toPlainString());


此代码的输出是:

0E-30
0.000000000000000000000000000000
0E-30
0.000000000000000000000000000000


我想要结果为“ 0”。

最佳答案

根据您的要求使用DecimalFormat创建格式化的String怎么样?



BigDecimal bd = new BigDecimal(2324.0011);
DecimalFormat format = new DecimalFormat("#,##0.00");

String formatted = format.format(bd); // String now contains "2,324.00"


要么

BigDecimal bd = new BigDecimal(2324.0011);
DecimalFormat format = new DecimalFormat("#,##0");

String formatted = format.format(bd); // String now contains "2,324"


或使用您提供的值:

BigDecimal a = new BigDecimal("-11111111111111111111111111111111111111.111111111111111111111111111111");
BigDecimal b = new BigDecimal("11111111111111111111111111111111111111.111111111111111111111111111111");
BigDecimal c = a.add(b);

DecimalFormat format = new DecimalFormat("#,##0");

System.out.println(format.format(c)); // prints "0"


您可以使用此正则表达式(?<=\d)\.?0+(?![\d\.])去除所有剩余的尾随零,例如:

String value = "10000.343999000";
String stripped = value.replaceAll("(?<=\\d)\\.?0+(?![\\d\\.])", ""); // now is 10000.343999

10-07 18:21