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

我尝试了这两行将字符串转换为双精度

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