2010-11-18 141 views
4

我搜索,我发现,但它都没有工作。我的问题是NumberFormatException被抛出,而我想从String投到double如何避免Java中的NumberFormatException?

字符串数组atomized包含很多字符串,我试图做出输出之前,使他们可见,所以我可以肯定有数据。唯一的问题是双重价值。它类似于5837848.3748980,但valueOf方法在这里总是抛出异常。我不知道为什么。

try 
{ 
int key = Integer.valueOf(atomized[0]); 

double value = Double.valueOf(atomized[1].trim()); 

int role = Integer.valueOf(atomized[2]); 

Double newAccountState = this.bankKonto.charge(key, value, role); 
System.out.println("NEW Account State "+newAccountState); 
this.answerClient(newAccountState.toString()); 
} 
catch (NumberFormatException e) 
{ 
System.out.println(e.getClass().toString()+" "+e.getMessage()); 
} 

异常输出:

java.lang.NumberFormatException: For input string: "109037.0" 
     at java.lang.NumberFormatException.forInputString(Unknown Source) 
     at java.lang.Integer.parseInt(Unknown Source) 
     at java.lang.Integer.valueOf(Unknown Source) 
     at vsys.ue02.server.Bank.computeData(Bank.java:122) 
     at vsys.ue02.server.Bank.run(Bank.java:160) 
+0

有什么异常可见? – darioo 2010-11-18 10:08:26

+0

NumberFormatException – Andre 2010-11-18 10:11:58

+0

darioo基本上是要求异常日志。 – 2010-11-18 10:16:34

回答

11

它工作正常,在这里。所以我假设你的系统区域设置为,,而不是.的小数点分隔符。为了避免这些东西,你可以使用DecimalFormat

new DecimalFormat().parse("5837848.3748980"); 

你变量的名称来看 - 帐户 - 我假设你正在与金钱打交道。您绝不能使用浮点类型来表示金钱。使用BigDecimal或可能的int

+0

我没有想到它,但是,德国小数点分隔符。 – Andre 2010-11-18 10:12:28

3

This是使用DecimalFormat将字符串转换为数字的起点。另外,如果你正在处理金钱和货币,你应该考虑使用BigDecimal而不是双倍。

2

您正在使用的Integer.parseInt对一些带有小数点的 - 这不是一个有效的整数 - 在您的堆栈跟踪

+0

问题就是这样的。我在这里进程间通信和雾化阵列包含一个协议形式的数据。它没有正确解析。但现在它可以工作,并且它可以运行得更好! – Andre 2010-11-20 06:58:59