The*_*mer 12 java exception bigdecimal
为什么下面的代码抛出了java数字格式异常?
BigDecimal d = new BigDecimal("10934,375");
Run Code Online (Sandbox Code Playgroud)
Erw*_*idt 14
是的,BigDecimal该类Locale在其构造函数中不考虑任何一个String,因为可以在此构造函数的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");
Run Code Online (Sandbox Code Playgroud)
注意:您需要获取DecimalFormat(子类NumberFormat)的实例才能调用该方法setParseBigDecimal.否则它返回一个Double替代,它是一个二进制浮点数,并且二进制浮点数不能准确地表示许多小数部分.因此,在许多情况下会导致精度损失.
问题是构造函数BigDecimal需要十进制数格式,其中小数点后面是十进制点.而不是十进制逗号,,所以这个特定情况的正确格式是:
BigDecimal d = new BigDecimal("10934.375");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19621 次 |
| 最近记录: |