2010-11-18 49 views
4

私は検索しましたが、見つかりましたが、すべてうまくいきませんでした。私の問題は、StringからdoubleにキャストしたいときにNumberFormatExceptionがスローされるということです。JavaでNumberFormatExceptionを回避するにはどうすればよいですか?

文字列配列には多くの文字列が含まれています。データを確実に表示できるように、それらを表示する前に出力を作成しようとしました。唯一の問題は二重値です。 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

+0

NumberFormatException – Andre

+0

dariooは基本的に例外ログを要求しています。 –

答えて

11

ここは正常に動作します。だから私はあなたのシステムロケールが.小数点区切りではなく,と仮定します。あなたがDecimalFormatを使用することができ、これらの事避けるために: - アカウント - あなたの変数の名前から判断する

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

を私はあなたがお金を扱っていると仮定します。お金を表すために浮動小数点型を使用してはいけません。 BigDecimalまたは可能であればint

+0

私はそれを考えていませんでしたが、はい、ドイツの小数点記号です。 – Andre

3

Thisは、文字列を数値に変換するための開始点です。また、お金や通貨を扱う場合は、ダブルの代わりにBigDecimalを使用することを検討する必要があります。あなたは、小数点と数にInteger.parseIntを使用している

2

- それは有効な整数ではありません - 目に見えるあなたのスタックトレースに

+0

問題はそれのようなものでした。私はここでプロセス間通信を行い、霧化配列にはプロトコルの形式でデータが入っています。それは正しく解析されませんでした。しかし今、それは動作し、bigdecimalでよりうまく動作します! – Andre

関連する問題