java.lang.NumberFormatException:对于输入字符串:“20,475.00”

我想要获得我的系统的运行平衡。 为此,我从列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" 

我怎么解决这个问题? 任何帮助将不胜感激。 谢谢

由于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(); 

使用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()); 

您的号码取决于语言环境。 Normaly数字只能包含开头的可选减号和可选的小数点。 不支持以逗号分隔的数千个。

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

如果你打算使用小数,我可以建议使用DecimalFormat

我尝试了这两行将字符串转换为double

 NumberFormat nf = NumberFormat.getInstance() dounum=nf.parse("24,000.50").toDouble()