无法解析逗号分隔的字符串数量。最初带有货币符号

Posted

技术标签:

【中文标题】无法解析逗号分隔的字符串数量。最初带有货币符号【英文标题】:Unable to parse comma separated string amount. Originally with Currency symbol 【发布时间】:2016-08-12 04:22:05 【问题描述】:

我正在尝试转换以逗号分隔的 String 货币值。它最初有一个货币符号。在这种情况下,比索符号。

我所做的是首先删除比索符号并从 JTable 的第 2 列中获取值,这给了我 String 的值 "212,312.00" 但是当我尝试使用 Double.valueOf("212,312.00")Double.parseDouble("212,312.00") 它时返回了 NumberFormatException 错误。

java.text.ParseException: Unparseable number: " 212,312.00"

这是我的代码:

for (int x = 0; x < feesJtbl.getRowCount(); x++) 
    String valueWithPesosSign = ((String) myModel.getValueAt(x, 1));
    String stringAmount = valueWithPesosSign.replaceAll("\\PPrint", "");
    //JOptionPane.showMessageDialog(null, stringAmount);
    doubleAmount = Double.parseDouble(stringAmount);
    totalOfTuition += doubleAmount;

有什么建议吗?我尝试了 2 种不同的解析方式,但看起来逗号是导致异常的原因。

【问题讨论】:

【参考方案1】:

您可能需要使用java.text.NumberFormat

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("212,312.00");
double d = number.doubleValue();

注意:这仅适用于当前默认语言环境碰巧使用逗号作为小数分隔符的情况。某些语言环境使用逗号作为千位分隔符,在这种情况下,“212,312.00”将解析为 212312.00 而不是引发错误。

否则,您可以使用 replaceAll 并从数字中删除逗号 (,) 并仅解析数字。

【讨论】:

【参考方案2】:

我意识到我只需添加另一个.replaceAll().replaceAll(",","");摆脱逗号。添加另一个replaceAll()后解析没有任何异常错误

for (int x = 0; x < feesJtbl.getRowCount(); x++) 
     String valueWithPesosSign = ((String) myModel.getValueAt(x, 1));
     String stringAmount = valueWithPesosSign.replaceAll("\\PPrint", "").replaceAll(",","");

     doubleAmount = Double.parseDouble(stringAmount);
     totalOfTuition += doubleAmount;

【讨论】:

以上是关于无法解析逗号分隔的字符串数量。最初带有货币符号的主要内容,如果未能解决你的问题,请参考以下文章

在碧玉报告中将字符串格式化为货币格式

使用货币符号和千位分隔符解析浮点值

为啥 Web API 可以正确解析动作路径中逗号分隔的 int 数组,但无法解析逗号分隔的十进制数组?

解析带有小数和分组分隔符的货币字符串,或者如果 Pattern 不匹配则抛出

无法将逗号分隔的字符串转换为数组

在 .NET 中解析分隔的 CSV