Android - форматирование чисел в зависимости от локали

Будучи новичком в Android, у меня есть код, объединенный, как показано ниже, с целью отображения определенного числа 12345,66 по-разному в зависимости от пользовательской локали. Однако это просто разбило мое тестовое приложение, и я не мог понять, почему... Благодарю вас за помощь. Заранее большое спасибо!

//get current locale and display number
Configuration sysConfig = getResources().getConfiguration();
Locale curLocale = sysConfig.locale;
String aNumber = "12345.66";
NumberFormat nf = NumberFormat.getInstance(curLocale);
aNumber = nf.format(aNumber);
numberText.setText(R.string.numberText + aNumber);

Макет.xml:

<TextView 
    android:layout_width="fill_parent"
android:layout_height="wrap_content"   
    android:id="@+id/nbumberText"
/>

person Liliw    schedule 26.09.2011    source источник
comment
Сообщение об ошибке показывает: извините, приложение неожиданно остановилось. Пожалуйста, попробуйте еще раз. Затем я должен принудительно закрыть приложение.   -  person Liliw    schedule 26.09.2011
comment
у кого-нибудь есть решение вернуть необработанный номер из строки форматированного числа?   -  person Sagar Nayak    schedule 06.02.2021


Ответы (3)


Согласно документации Android/Java, вы можете использовать java.text.NumberFormat:

NumberFormat.getInstance().format(myNumber);

При этом будет использоваться локаль текущего пользователя.

Дополнительные сведения см. на странице http://developer.android.com/reference/java/text/NumberFormat.html

person Gonzalingui    schedule 16.08.2013

Это утверждение очень подозрительно:

numberText.setText(R.string.numberText + aNumber);

Что ты имеешь в виду? Это опечатка?

Чтобы отобразить отформатированное число, вероятно, вам нужно только:

numberText.setText(aNumber);

Кстати, я думаю, вы не использовали отладчик. Серьезному разработчику это обязательно нужно.

person Yam    schedule 01.10.2011
comment
Спасибо, попробовал numberText.setText(aNumber); но все еще не работает. Итак, в основном я думаю, что что-то не так с числовым форматом и синтаксическим анализом, но я не могу сказать, что не так, и я не мог получить подсказку от отладчика... - person Liliw; 03.10.2011

Он вылетает, потому что NumberFormat.format() принимает Double или Long, но не String. Так:

aNumber = nf.format(aNumber);

Должно быть:

aNumber = nf.format(new Double(aNumber));
person M Shawky    schedule 02.07.2020