2016-04-13 3 views
0

Мне нужно применить метод процента к числу в JLabel. Я могу это сделать с Jtextfield, но по какой-то причине я не могу заставить его работать над JLabel.Преобразование строки в читаемый int из JLabel

Вот код, который начинается, когда JButton нажата:

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) 

Я исследовал эту проблему и, кажется, это очень распространено, но по какой-то причине я не могу применить другие ответы на моей ситуации поскольку мне не хватает знаний для этого.

+1

Вы должны устранить знак E перед разбором строки в Integer – esprittn

+0

Любая идея, как я могу избавиться от нее, пока она читает то, что находится в JLabel? –

+0

Удивительные ответы. Я ценю время и знания, которые вы все оказали мне на помощь. С учетом сказанного я решил использовать «Float» вместо «Double», как сказал @dambros. Оба ответа от Лазаньи и дамбро должны рассматриваться другими пользователями с аналогичной проблемой, поскольку они чрезвычайно информативны. Еще раз спасибо. –

ответ

1

Проблема £ И ., так как вы пытаетесь преобразовать int.

Использование поплавок вместо:

Float.parseFloat(balanceLabel.getText().substring(1)); 

Таким образом, вы можете иметь десятичные значения, что имеет смысл для валюты.

+0

Отличный ответ! Теперь все ясно. Не могу поверить, что я не думал об этом DARN DECIMAL POINT! Я думал, что именно «Е» заставляло его показывать как ошибку. Спасибо за ваше время и знания. Сюда входят все остальные пользователи, которые помогли этому ответу. еще раз спасибо –

0

Ну, из того, что я вижу, вы пытаетесь преобразовать '£', который не является целым числом, поэтому вы получаете для этого исключение. У вас также есть десятичное значение, которое целое не может обрабатывать, поэтому по этой причине также генерируется исключение.

public static int parseInt(String s) throws NumberFormatException 

Анализирует строковый аргумент как десятичное целое. Символы в строке должны быть десятичными цифрами, за исключением того, что первым символом может быть знак минус ASCII «-» («\ u002D»), чтобы указать отрицательное значение или знак ASCII плюс «+» («\ u002B») для указания положительного значения. Полученное целочисленное значение возвращается точно так же, как если бы аргумент и radix 10 были указаны как аргументы метода parseInt (java.lang.String, int).

Параметры: S - строка, содержащая представление INT, чтобы быть разобраны

Возвращает: целочисленное значение, представленное аргументом в десятичной системе.

Throws: NumberFormatException - если строка не содержит разборное целое число.


, что вы могли бы сделать, если вы знаете, что все будет «£ XXXX.XX», что вы можете изменить эту строку

interest(Integer.parseInt(balanceLabel.getText())); 

этому

interest(Double.parseDouble(balanceLabel.getText().substring(1)); 

, который затем возвращает «1000,0»

public String substring(int beginIndex) 

Возвращает строку, которая является подстрокой этой строки. Подстрока начинается с символа в указанном индексе и продолжается до конца этой строки. Примеры:

"несчастным" .substring (2) возвращает "счастливый"

"Харбисона" .substring (3) возвращает "зубров"

"пустоты".подстрока (9) возвращает «» (пустая строка)

Параметры: beginIndex - начальный индекс включительно.

Возвраты: указанная подстрока.

Throws: IndexOutOfBoundsException - если beginIndex отрицательный или больше длины этого объекта String.

+0

Да, я понимаю, что знак Е является причиной проблемы. Я попытался использовать вашу строку кода, и я получаю ту же ошибку, но без номера в номере. Например: _Для ввода строки: «1000.0» _ –

+0

К сожалению, я виноват, я посмотрел на это, прежде чем собираться получить еду. Я сделал редактирование, по существу 1000.0 не может быть целым числом, это Double, поэтому вы должны изменить «Integer» на «Double». Надеюсь, это поможет, я изменил свой код, чтобы отразить это. Дайте мне знать, если есть какие-либо другие проблемы. Исключение происходит из-за того, что «строка не содержит разборного целого». Ваш интерес либо должен предоставить двойное значение, либо вам придется избавиться от дополнительных значений после десятичной дроби, но, похоже, вы хотите, чтобы значение десятичной величины было точно, так что идите с парными. – XaolingBao

+0

Очень приятно. Спасибо за ваше время и знания. Я действительно ценю это от всего сердца! –

Смежные вопросы