java - 在多个语言环境中将字符串解析为 BigDecimal

标签 java string parsing locale bigdecimal

我必须将表示数字的字符串解析为 BigDecimal。 我的问题是我的用户可以在多个区域设置中生成这些数字, 而且我无法事先知道我正在解析哪个区域设置。 例如,我可以获得:

  • 1234
  • 1.234
  • 1234.56
  • 1234,56
  • 1.234,56
  • 1'234.56

这些始终是货币,因此小数部分始终是 0 到 2 的数字。 有没有安全的方法来解析这些数字? 特别是,我担心区分(例如)1.200(一千二百)和 1.20(一和二十美分)是相当危险的。

谢谢。

最佳答案

您可以强制您的字符串正确表示 double ,然后解析它

    public static String getCurrency(String val) {

    // if val doesn't have decimal part ex 1234 or 1.234 (I suppose only 2 decimal values are allowed, usually the case with currencies
    if( val.charAt(val.length()-3) != '.' && val.charAt(val.length()-3) != ',' ) {
        val = val + ".00";
    }
    // get rid of . , ' ...
    val = val.replaceAll("[^0-9]", "");
    // add the point to mark the decimal part
    val = val.substring(0, val.length()-2) + "." + val.substring(val.length()-2);
    return val;
}

测试它:

    String str1 = "1.234,56";
    String str2 = "1'234.56";
    String str3 = "1234.56";
    String str4 = "1.234";
    String str5 = "1234";
    String str6 = "1234,56";

    System.out.println (getCurrency(str1));
    System.out.println (getCurrency(str2));
    System.out.println (getCurrency(str3));
    System.out.println (getCurrency(str4));
    System.out.println (getCurrency(str5));
    System.out.println (getCurrency(str6));

打印:

    1234.56
    1234.56
    1234.56
    1234.00
    1234.00
    1234.56

关于java - 在多个语言环境中将字符串解析为 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55296557/

相关文章:

java - 如何将 String[][] 获取到 Arraylist<String[][]>

python - 在字符串中查找重复模式

ios - 将 JSON 解析为 UILabel 时出现空数组错误

Java/Vaadin - 对各个 View 使用不同的主题

java - 用于独立 java 项目的 Maven Archetype

java - 从列表中多选

java - 将所选项目从 jlist 保存到字符串变量

javascript - 如何将连续的字符串输入与 javascript 中的段落匹配,同时显示错误?

javascript - 打印 JSON 解析的对象?

解析 R 脚本中的命令行参数