2012-03-11 30 views
3

私のシステムの稼働中の残高を取得しようとしています。これを行うには、私は、列AMOUNTからjtableのすべての数字の合計を取得し、txtLoanAmount内の値に合計を引く。 java.lang.NumberFormatException:入力文字列: "20,475.00"

String LoanAmount = txtLoanAmount.getText(); 
float f = Float.valueOf(LoanAmount.trim()).floatValue(); 
float balance = 0; 
float sum = 0; 

for(int i=0;i<=tableLedger.getRowCount()-1;i++) { 
    sum = sum + Float.parseFloat(tableLedger.getModel().getValueAt(i, 2).toString()); 
} 
balance = f - sum; 
System.out.println(balance); 

は今、私はエラーメッセージが表示されます:: はここに私のコードスニペットです

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "20,475.00" 

どのように私はこの問題を解決することができますか?どんな助けもありがとう。ありがとう

答えて

8

使用して提案することができ、ここではどのように短い例ですロケールが取得している数値形式と一致しない場合は、ローカライズされた解析を行います。

String str = "20,475.00"; 
NumberFormat nf = NumberFormat.getInstance(Locale.US); // Looks like a US format 
float f = nf.parse(str).floatValue(); 
+0

これは、私が上に示したコードの他のすべての部分を保持するか? – zairahCS

+0

@zairahCS parseFloatとvalueOfを使用する代わりに、nf.parse()を使用します。浮動小数点として解析されたら、残りのコードを変更する必要はありません。 –

+0

ありがとう!今それは働いている... – zairahCS

2

Float.parseFloatの代わりにNumberFormatクラスを使用してください。 20,475.00などの書式設定された番号を解析するための形式を指定できます。

例:

NumberFormat nf = NumberFormat.getInstance(); 
// provided your Locale information matches your number format 
sum += nf.parse(tableLedger.getModel().getValueAt(i, 2).toString()); 
+0

に文字列を変換するために、この2行をしようとした私は、コードの中にそれを置くことができる方法を求めることができますか? – zairahCS

+0

@zairahCS:コードを少し追加して助けてください。 –

+0

私はsum = 0と上記の他の変数に対してdatytyoeを変更する必要がありますか? coz私はまだエラーが発生する – zairahCS

1

あなたの数は、ロケールに依存しています。通常、数値には冒頭にオプションのマイナス記号とオプションの小数点のみを含めることができます。カンマで区切られた何千もの文字はサポートされていませ

Pablo Santa Cruzが示唆するように、NumberFormatクラスでは、独自の書式を指定して、その書式に従って解析することができます。

あなたは小数を使用しようとしている場合は、私はFloat.parseFloat()とFloat.valueOf()は常に数は、ローカルフォーマットであることを前提としていますのでDecimalFormat

-1

私は、二重

NumberFormat nf = NumberFormat.getInstance() 
dounum=nf.parse("24,000.50").toDouble() 
関連する問題