java.lang.NumberFormatException: недопустимый двойной: "١2" Проблема с обработкой чисел на персидском языке - PullRequest
1 голос
/ 30 июня 2019

получаю ошибку недопустимого Double при наборе персидских чисел java.lang.NumberFormatException: недопустимый двойной: "٢3"

    public void afterTextChanged(Editable s) {

        numberEditText.removeTextChangedListener(this);

        String text = numberEditText.getText().toString();

        text = text.replace(",", "");

        if (text.length() > 0){
            DecimalFormat sdd = new DecimalFormat("#,###");

                Double doublenumber = Double.parseDouble(text);

            String format = sdd.format(doublenumber);
            numberEditText.setText(format);
            numberEditText.setSelection(format.length());
        }

        numberEditText.addTextChangedListener(this);
    }

1 Ответ

0 голосов
/ 01 июля 2019

Вам нужно будет установить язык на вашем DecimalFormat.Вы можете сделать это, используя метод NumberFormat.getInstance(Locale locale).В верхней части документации для DecimalFormat он явно объясняет, как использовать NumberFormat для получения десятичного формата с языковым стандартом.

РЕДАКТИРОВАТЬ: Как Стивен заявил в комментариях, это только половинарешения, другая половина должна использовать объект DecimalFormat, чтобы разобрать строку в число.Так что код будет выглядеть так:

Locale decimalFormatLocale = YOUR_LOCALE_HERE;
DecimalFormat decimalFormatter = NumberFormat.getInstance(decimalFormatLocale);

double formattedNumber = decimalFormatter.parse(text, new ParsePosition(0)); //the position here should be the position in the String variable text that the number starts.
...