【发布时间】:2014-11-05 23:38:34
【问题描述】:
我在使用 BigDecimal 时遇到了一个奇怪的问题。
我有一个解析方法如下:
protected BigDecimal parseBigDecimalFromText(String text) {
Logger.info("parseBigDecimalFromText("+text+")");
return new BigDecimal(text);
}
现在,当我运行测试时,代码可以正常工作。
@Test
public void parseBigDecimalFromZero() {
Logger.createLogger();
// given
String text = "0";
// when
BigDecimal bigDecimal = basicPage.parseBigDecimalFromText(text);
// then
Assert.assertEquals(new BigDecimal("0"), bigDecimal);
}
但是当我执行我的应用程序传递完全相同的字符串“0”时,我得到了一个“java.lang.NumberFormatException”
以下是日志:
2014-11-05 23:21:33.142: INFO - parseBigDecimalFromText(0)
2014-11-05 23:21:33.142: SEVERE - null
java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:470)
at java.math.BigDecimal.<init>(BigDecimal.java:739)
at com.aa.travian.pages.BasicPage.parseBigDecimalFromText(BasicPage.java:121)
我知道,当我的应用启动时,我正在设置特定的语言环境:
Locale locale = getConfig().getLocale();
ResourceBundle = ResourceBundle.getBundle("translations", locale);
但我不明白这应该如何破坏我的 parseBigDecimalFromText 方法。
以下是我的java版本:
java -versionjava version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.2) (7u65-2.5.2-3~14.04)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
知道这里发生了什么吗? 查看 BigDecimal 源代码,它看起来像是在解析指数时下降:
// exponent expected
if ((c != 'e') && (c != 'E'))
throw new NumberFormatException();
提前感谢您的宝贵时间。
【问题讨论】:
-
如果你手动输入
new BigDecimal("0")会发生什么? -
确定
0后面没有空格?
标签: java bigdecimal numberformatexception icedtea