java将特定于语言环境的字符串转换为BigDecimal的最佳方法
我必须将德语区域设置格式String
转换为BigDecimal
。然而,我正在努力寻找最好的解决方案
以下代码显示了我的问题:
String numberString = "2.105,88";
NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
try {
Number parsed = nf.parse(numberString);
BigDecimal bd1 = new BigDecimal(parsed.toString());
System.out.println(bd1.toString());
BigDecimal bd2 = new BigDecimal(parsed.doubleValue());
System.out.println(bd2);
BigDecimal bd3 = new BigDecimal(numberString);
System.out.println(bd3);
} catch (ParseException e) {
e.printStackTrace();
}
结果是
2105.88
2105.8800000000001091393642127513885498046875
Exception in thread "main" java.lang.NumberFormatException at java.math.BigDecimal.(Unknown Source) at java.math.BigDecimal.(Unknown Source) at test.BigDecimalTest.main(BigDecimalTest.java:22)
第一个输出是正确的,但将String
转换为Number
(Double
精确地说),然后再转换回String
,然后转换成特定类型的Number
,BigDecimal
是没有意义的
第二个输出不正确,但可以通过设置BigDecimal
的比例来解决。然而,数字的数量并不总是已知的
第三个输出显然不是我想要的
我的问题是:最好的方式是什么?有更好的方法吗
# 1 楼答案
DecimalFormat
有一个名为^{parse()
返回BigDecimal
。您只需要对返回的Number
进行强制转换输出:
setParseBigDecimal
是在Java1.5中引入的# 2 楼答案
似乎没有其他方法,因为
java.Lang.Number
没有返回BigDecimal
类型的方法。无论如何,它是有意义的,因为BigDecimal
只接受格式正确的字符串,这些字符串不像"2.105,88"
而是像"2105.88"
让我展示一下你的我的代码:
我希望这有帮助