java.lang.NumberFormatException:对于输入字符串:";20475.00“;

java.lang.NumberFormatException:对于输入字符串:";20475.00“;,java,numberformatter,Java,Numberformatter,我正在努力获得我的系统的运行平衡。为此,我从列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

我正在努力获得我的系统的运行平衡。为此,我从列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);
我怎样才能解决这个问题?任何帮助都将不胜感激。谢谢

使用类而不是
Float.parseFloat
。它将允许您指定解析格式化数字的格式,如
20475.00

例如:

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

您的号码取决于地区。通常,数字的开头只能包含可选的减号和可选的小数点。不支持逗号分隔的千

正如PabloSanta Cruz所建议的,NumberFormat类允许您指定自己的数字格式,并根据该格式进行解析

如果要使用小数,我建议使用

,因为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();

我试着用这两行将字符串转换成双精度


我是否必须更改sum=0和上述其他变量的日期?因为我还有一个error@zairahCS:当然可以。您需要将我输入的代码片段改编为您的代码。这只是一个解析格式化数字的示例。您可能必须将该代码放在循环中。在此情况下,我是否要保留上面显示的代码的所有其他部分?@zairahCS,而不是使用parseFloat和valueOf,使用nf.parse(),一旦将其解析为float,其余代码就不需要更改。
String str = "20,475.00";
NumberFormat nf = NumberFormat.getInstance(Locale.US); // Looks like a US format
float f = nf.parse(str).floatValue();
NumberFormat nf = NumberFormat.getInstance()
dounum=nf.parse("24,000.50").toDouble()