java.lang.NumberFormatException: для входной строки: "20 475,00" - PullRequest
4 голосов
/ 11 марта 2012

Я пытаюсь получить текущий баланс моей системы.Для этого я получаю сумму всех чисел в jtable из столбца AMOUNT и вычитаю сумму до значения внутри 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 ]

10 голосов
/ 11 марта 2012

Поскольку 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();
2 голосов
/ 11 марта 2012

Используйте 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());
1 голос
/ 11 марта 2012

Ваш номер зависит от региона. Обычно число может содержать только дополнительный знак минус в начале и дополнительную десятичную точку. Разделенные запятыми тысячи не поддерживаются.

Класс NumberFormat, как предложил Пабло Санта-Крус, позволяет вам указать собственный формат чисел и анализировать в соответствии с этим форматом.

Если вы собираетесь использовать десятичные дроби, я могу предложить использовать DecimalFormat

0 голосов
/ 10 октября 2012

Я пробовал эти две строки, чтобы преобразовать строку в двойную

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