解决方法
是的,BigDecimal类在其构造函数中没有考虑到任何Locale,它需要一个String,可以在这个构造函数的Javadoc中读取:
the fraction consists of a decimal point followed by zero or more
decimal digits.
如果要根据不同的区域设置进行解析,使用逗号作为小数分隔符,则需要使用具有特定区域设置的java.text.DecimalFormat.
例:
DecimalFormat fmt = new DecimalFormat("0.0",new DecimalFormatSymbols(Locale.GERMAN)); fmt.setParseBigDecimal(true); BigDecimal n = (BigDecimal) fmt.parse("10934,375");
注意:您需要获取DecimalFormat(NumberFormat的子类)的一个实例,以便能够调用setParseBigDecimal方法.否则它返回一个Double代替,它是一个二进制浮点数,二进制浮点数为cannot accurately represent many decimal fractions.这样在许多情况下会导致精度的损失.