Преобразовать значение TextField в Int - PullRequest
1 голос
/ 21 января 2011

У меня есть TextField, где я могу вводить значения; И мне нужно преобразовать значение, введенное в Int, и отобразить его с помощью S.O.Println.

EDIT:

Я пробовал сейчас:

try {
int i = Integer.parseInt(myText.getText());
System.out.println("This is an integer " + i);              
}
catch (NumberFormatException x) {
System.out.println("Error : "+ x.getMessage());
}

Но это дает мне:

This is an integer 122                // When I type 122
Error : For input string: "122,5"     // When I type 122,5
Error : For input string: "122.5"     // When I type 122.5

Любые идеи.

EDIT:

Вот оно:

double d = Double.parseDouble(myText.getText());
int i = (int)d;

Ответы [ 5 ]

3 голосов
/ 21 января 2011

Похоже, вы используете запятую в качестве разделителя, а не точку. И вообще, вы не сможете разобрать его как int. Вам нужно Double.parseDouble(..)

Использование может использовать NumberFormat, соответствующий текущей локали, для анализа ввода.

Если вы используете SWT (tagged eclipse) - я думаю, вы можете ограничить возможные символы, добавив VerifyListener в текстовое поле. В прослушивателе вызовите doit() для пропущенного события, если вход разрешен.

Если используется AWT (TextField является текстовым компонентом awt) - тогда смотрите что-то вроде этого

0 голосов
/ 21 января 2011

11,5 - это не число, которое Java может анализировать без другого взаимодействия. Вы можете заменить запятую на десятичную точку, а также удалить все пробелы (в зависимости от вашей локали):

Double.parseDouble(myText.getText().replaceAll(",", ".").replaceAll(" ", ""));

Примечания:

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

0 голосов
/ 21 января 2011

Запятая выдает ошибку разбора.Если вам нужна запятая, вы можете использовать ее как разделитель и анализировать обе стороны отдельно.

Вот пример разделения двух значений, разделенных запятыми, в строке.вывод будет:

1
2
3
4
0 голосов
/ 21 января 2011

Вы пытаетесь разобрать строку "11,5" как целое число. Это определенно не целое число. Поэтому исключение брошено.

Вы можете попробовать использовать Double.parseDouble (), и результат зависит от вашей локали. Если вы находитесь на английском языке, он ожидает точку (.), А не кому, поэтому число в любом случае должно выглядеть как 11,5

0 голосов
/ 21 января 2011

Это потому, что myText.getText() это 11,5 (не числовой), а не 11.5 (двойной).

Попробуйте сделать,

Double.parseDouble(myText.getText().replaceAll(",", "."));

Это заменит , на..

В качестве альтернативы для преобразования номера используется NumberFormat.


Также я заметил, что вы используете Integer.parseInt() при разборе double чисел,Вот почему вы получаете исключения.

Вы должны использовать NumberFormat.getInstance(locale).parse(myText.getText()), чтобы получить требуемый результат.Не забывайте, что parse() возвращает Number объект, поэтому чтобы получить double, сделайте следующее:

double d = NumberFormat.getInstance(locale).parse(myText.getText()).doubleValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...