将BigDecimal转换为String,不带尾随零

时间:2014-10-16 16:17:56

标签: java string-formatting bigdecimal

我想从BigDecimal中删除所有尾随零并打印它。但是trailingZeros方法不能像(I)预期的那样工作。

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"

的结果

1 个答案:

答案 0 :(得分: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