如何将一个字符串解析为BigDecimal?

63

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

我想将它解析为BigDecimal。问题在于我尝试过DecimalFormat和NumbeFormat都失败了。


展示一下你尝试过的内容,我们会帮助你。 - Tala
4个回答

82

试一试

// 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)或将其抛出并让程序的另一部分来处理它。


如果分组符号和小数点符号被交换,上述代码将无法正常工作。如果按照以下方式初始化DecimalFormat,则可以正常工作:DecimalFormat res = new DecimalFormat(); res.setDecimalFormatSymbols(symbols); res.applyLocalizedPattern(formatter); - raisercostin

27

试一下吧

 String str="10,692,467,440,017.120".replaceAll(",","");
 BigDecimal bd=new BigDecimal(str);

17

BigDecimal 无法解析示例字符串。 - Tarynn
对于字符串值1,000,在构造转换时没有考虑逗号,因此会失败。 - Zubair Ahmed

14

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

然后,您只需调用BigDecimal myBigD=new BigDecimal(filteredString);即可。

您也可以创建一个NumberFormat并调用setParseBigDecimal(true)。然后使用parse()方法将自动格式化为BigDecimal,无需手动格式化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接