60

我有这个字符串:10,692,467,440,017.120(这是一个数量)。

我想将其解析为 BigDecimal。问题是我徒劳地尝试了 DecimalFormat 和 NumbeFormat 。

4

4 回答 4

79

尝试这个

// Create a DecimalFormat that fits your requirements
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(',');
symbols.setDecimalSeparator('.');
String pattern = "#,##0.0#";
DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
decimalFormat.setParseBigDecimal(true);

// parse the string
BigDecimal bigDecimal = (BigDecimal) decimalFormat.parse("10,692,467,440,017.120");
System.out.println(bigDecimal);

如果你正在构建一个支持 I18N 的应用程序,你应该使用DecimalFormatSymbols(Locale)

还要记住,它decimalFormat.parse可以抛出一个ParseException,所以你需要处理它(使用 try/catch)或抛出它并让程序的另一部分处理它

于 2013-08-14T12:36:33.203 回答
27

尝试这个

 String str="10,692,467,440,017.120".replaceAll(",","");
 BigDecimal bd=new BigDecimal(str);
于 2013-08-14T12:36:15.587 回答
16

尝试正确的构造函数 http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#BigDecimal(java.lang.String)

您可以使用 String 直接实例化 BigDecimal ;)

例子:

BigDecimal bigDecimalValue= new BigDecimal("0.5");
于 2013-08-14T12:35:15.730 回答
13

BigDecimal 提供了一个字符串构造函数。您需要通过正则表达式或 . 从数字中删除所有逗号String filteredString=inString.replaceAll(",","")

然后你只需调用BigDecimal myBigD=new BigDecimal(filteredString);

您还可以创建一个NumberFormat并调用setParseBigDecimal(true). 然后parse(会给你一个 BigDecimal 而不必担心手动格式化。

于 2013-08-14T12:33:12.627 回答