我必须将表示数字的字符串解析为 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/