This question already has an answer here:
Why does new BigDecimal(“0.0”).stripTrailingZeros() have a scale of 1?
(1个答案)
5年前关闭。
我想从BigDecimal中删除所有尾随零,然后打印出来。但是,trailingZeros方法无法按预期的那样工作。
此代码的输出是:
我想要结果为“ 0”。
要么
或使用您提供的值:
您可以使用此正则表达式
(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