Преобразование строки в читаемый int из JLabel
Мне нужно применить метод интереса к числу в JLabel. Я могу сделать это из Jtextfield, но по какой-то причине я не могу заставить его работать на JLabel.
Вот код, который запускается при нажатии кнопки J:
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
interest(Integer.parseInt(balanceLabel.getText()));
balanceLabel - это название лейбла, с которым я пытаюсь работать.
Вот ошибка, которая возвращается, когда я нажимаю кнопку:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "£1000.0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
Я исследовал эту проблему, и она кажется мне чрезвычайно распространенной, но по какой-то причине я не могу применить другие ответы к моей ситуации, поскольку мне не хватает знаний для этого.
2 ответа
Проблема заключается в £
И .
так как вы пытаетесь преобразование int.
Вместо этого используйте поплавок:
Float.parseFloat(balanceLabel.getText().substring(1));
Таким образом, вы можете иметь десятичные значения, что имеет смысл для валюты.
Из того, что я вижу, вы пытаетесь преобразовать '£', которое не является целым числом, поэтому вы получаете исключение для этого. У вас также есть десятичное значение, которое не может обработать целое число, поэтому по этой причине также генерируется исключение.
public static int parseInt(String s) throws NumberFormatException
Разбирает строковый аргумент как десятичное целое число со знаком. Все символы в строке должны быть десятичными цифрами, за исключением того, что первый символ может быть знаком минус ASCII '-' ('\u002D') для обозначения отрицательного значения или знаком плюс ASCII '+' ('\u002B') указать положительное значение. Полученное целочисленное значение возвращается точно так же, как если бы аргумент и основание 10 были заданы в качестве аргументов метода parseInt(java.lang.String, int).
Параметры: s - строка, содержащая представление int для анализа
Возвращает: целочисленное значение, представленное аргументом в десятичном виде.
Броски: NumberFormatException - если строка не содержит анализируемого целого числа.
что вы могли бы сделать, если вы знаете, что все будет "£ xxxx.xx", - это вы можете изменить эту строку
interest(Integer.parseInt(balanceLabel.getText()));
к этому
interest(Double.parseDouble(balanceLabel.getText().substring(1));
который затем вернул бы "1000.0"
public String substring(int beginIndex)
Возвращает строку, которая является подстрокой этой строки. Подстрока начинается с символа по указанному индексу и продолжается до конца этой строки. Примеры:
"несчастный".substring(2) возвращает "счастливый"
"Harbison".substring (3) возвращает "бизона"
"emptiness".substring (9) возвращает "" (пустая строка)
Параметры: beginIndex - начальный индекс, включительно.
Возвращает: указанная подстрока.
Броски: IndexOutOfBoundsException - если beginIndex отрицателен или больше чем длина этого объекта String.