Java 大十进制数格式异常

2022-09-04 07:33:36

为什么下面的代码会引发 java 数字格式异常?

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

答案 1

是的,该类在其构造函数中不考虑任何采用 ,可以在此构造函数的 Javadoc 中读取:BigDecimalLocaleString

分数由一个小数点后跟零个或多个小数位组成。

如果要根据不同的 ,使用逗号作为小数分隔符的 ,则需要与特定的 .Localejava.text.DecimalFormatLocale

例:

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

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


答案 2

问题是 构造函数 需要十进制数格式,其中小数点紧跟在十进制点之后,而不是十进制逗号,因此此特定情况的正确格式是:BigDecimal.,

BigDecimal d = new BigDecimal("10934.375");