Java大十进制数格式exception

为什么下面的代码抛出了java数字格式exception?

BigDecimal d = new BigDecimal("10934,375"); 

是的, BigDecimal类在其构造函数中不会将任何Locale考虑在内,因为可以在此构造函数的Javadoc中读取:

该分数由小数点后跟零个或多个十进制数字组成。

如果要根据使用逗号作为小数分隔符的其他Locale进行解析,则需要将java.text.DecimalFormat与特定Locale一起使用。

例:

 DecimalFormat fmt = new DecimalFormat("0.0", new DecimalFormatSymbols(Locale.GERMAN)); fmt.setParseBigDecimal(true); BigDecimal n = (BigDecimal) fmt.parse("10934,375"); 

注意 :您需要获取DecimalFormatNumberFormat的子类)的实例才能调用方法setParseBigDecimal 。 否则它返回一个Double ,这是一个二进制浮点数,二进制浮点数不能准确地表示许多小数 。 因此,在许多情况下会导致精度损失。

问题是BigDecimal构造函数需要十进制数格式,小数点后面的小数点. 而不是十进制逗号,所以这个特定情况的正确格式是:

 BigDecimal d = new BigDecimal("10934.375"); 

您可以使用NumberFormat选择Locale,请参阅示例:

  String numberToFormat = "1.900,35"; NumberFormat formatter = NumberFormat.getNumberInstance(Locale.GERMAN); Number number = formatter.parse(numberToFormat); BigDecimal decimal = BigDecimal.valueOf(number.doubleValue());