Правильный способ приблизиться к валюте INR в Java - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть этот код для INR

long tenderedAmt = (long) NumberFormat.getNumberInstance(new Locale("en", "in")).parse(jAmtTenderedFormattedTextField.getText());` 

Но когда я ввожу сумму 00.50, это исключение будет

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long

Использование Double

Double tenderedAmt = (Double) NumberFormat.getNumberInstance(new Locale("en", "in")).parse(jAmtTenderedFormattedTextField.getText());

Этот фрагмент кода вызывает то же исключение.

Использование

Double tenderedAmt = (Double) jAmtTenderedFormattedTextField.getText());

В приведенном выше фрагменте, если я ввел 1000,00, предполагается, что 1,00 вместо тысячи.
И бросить
java.lang.NumberFormatException: For input string: "1,000.00"
Так как же я могу получитьправильно подойти к валюте?

1 Ответ

0 голосов
/ 12 февраля 2019

Вот метод javadoc parse, и вот что он говорит:

Анализирует текст с начала данной строки для получения числа.Метод может не использовать весь текст данной строки.

Таким образом, если мы присваиваем результат типу Number, он должен дать нам правильное значение, например:

Number result = NumberFormat.getNumberInstance(new Locale("en", "in")).parse("1000.00");
System.out.println(result.doubleValue());

Это должно вывести 1000.0, как и ожидалось.Кроме того, нам не нужно cast это в любой тип.Мы можем просто позвонить doubleValue() или longValue() или любому другому xxxValue(), чтобы получить соответствующий тип.

Если он печатает 1.0, тогда я рекомендую проверить значение, возвращаемое jAmtTenderedFormattedTextField.getText().

...