5

システムの実行バランスを取得しようとしています。これを行うには、AMOUNT列からjtable内のすべての数値の合計を取得し、その合計をtxtLoanAmount内の値に減算します。これが私のコードスニペットです:

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"

どうすればこれを解決できますか?どんな助けでもありがたいです。ありがとう

4

4 に答える 4

12

Float.parseFloat()とFloat.valueOf()は常に数値がローカル形式であると想定するため、ロケールが取得している数値形式と一致しない場合にローカライズされた解析を行う方法の簡単な例を次に示します。

String str = "20,475.00";
NumberFormat nf = NumberFormat.getInstance(Locale.US); // Looks like a US format
float f = nf.parse(str).floatValue();
于 2012-03-11T15:55:15.113 に答える
2

NumberFormatの代わりにクラスを使用してくださいFloat.parseFloat。これにより、などのフォーマットされた数値を解析するためのフォーマットを指定できます20,475.00

例:

NumberFormat nf = NumberFormat.getInstance();
// provided your Locale information matches your number format
sum += nf.parse(tableLedger.getModel().getValueAt(i, 2).toString());
于 2012-03-11T15:46:30.980 に答える
1

番号はロケールによって異なります。通常、数値には、先頭にオプションのマイナス記号とオプションの小数ドットのみを含めることができます。カンマ区切りの数千はサポートされていません。

NumberFormatクラスは、Pablo Santa Cruzが提案したように、独自の数値形式を指定し、その形式に従って解析できるようにします。

小数を使用する場合は、DecimalFormatの使用をお勧めします

于 2012-03-11T15:49:41.370 に答える
0

文字列をdoubleに変換するためにこの2行を試しました

NumberFormat nf = NumberFormat.getInstance()
dounum=nf.parse("24,000.50").toDouble()
于 2012-10-10T07:37:38.217 に答える