【问题标题】: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("\\P{Print}", "");
    //JOptionPane.showMessageDialog(null, stringAmount);
    doubleAmount = Double.parseDouble(stringAmount);
    totalOfTuition += doubleAmount;
}

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

【问题讨论】:

    标签: java swing number-formatting parseexception


    【解决方案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("\\P{Print}", "").replaceAll(",","");
      
           doubleAmount = Double.parseDouble(stringAmount);
           totalOfTuition += doubleAmount;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-03
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        相关资源
        最近更新 更多