2012-03-11 90 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

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

,我是否应该保留上面显示的代码的所有其他部分? – zairahCS 2012-03-11 16:03:03

+0

@zairahCS不是使用parseFloat和valueOf,而是使用nf.parse(),一旦你将它解析为一个float,其余的代码就不需要改变。 – 2012-03-11 16:21:44

+0

谢谢!现在它正在工作...... – zairahCS 2012-03-11 16:34:57

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()); 
+0

我可以问我怎样才能将它放入代码? – zairahCS 2012-03-11 15:48:11

+0

@zairahCS:添加了一小段代码,可能有所帮助。 – 2012-03-11 15:50:31

+0

我是否必须改变我的datytyoe sum = 0和上面的其他变量?因为我仍然得到一个错误 – zairahCS 2012-03-11 15:53:44

1

你的数量为区域设置相关。通常,一个数字在开头只能包含可选的减号,并且可以包含可选的小数点。逗号分隔的数千个不支持。

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

如果你要使用小数,我可以用DecimalFormat

-1

我想这个两行字符串转换为双

NumberFormat nf = NumberFormat.getInstance() 
dounum=nf.parse("24,000.50").toDouble() 
相关问题