2014-10-16 95 views
1

我想从BigDecimal中删除所有尾随零并将其打印出来。但尾随的零方法不能按照我的预期工作。将BigDecimal转换为不带尾随零的字符串

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” 的结果。

+0

我的运行完全相同的代码的结果略有不同:'0E-30 0.000000000000000000000000000000 0' – 2014-10-16 16:24:54

+2

嗯...在最后两行,我的代码打印出“0”。你确定这是你的*确切的*代码?您使用的是哪个版本的Java? – 2014-10-16 16:24:56

+0

是的,代码是正确的。我的版本: Java版本“1.6.0_65” Java™SE运行时环境(版本1.6.0_65-b14-462-11M4609) Java HotSpot™64位服务器VM(版本20.65-b04-462,混合模式) – titog 2014-10-16 16:29:44

回答

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 
+0

我不知道小数点后的非零数字的数量。我想打印所有这些数字。 – titog 2014-10-16 16:33:34

+0

在这种情况下,您可以对结果值使用正则表达式 – PeterK 2014-10-16 16:36:27

+0

实际上,有人回答说这是bug。我只会更新java。谢谢。 – titog 2014-10-16 16:40:00

相关问题