2014-01-15 2 views
6

У меня есть сообщение об ошибке от шведского пользователя, в котором говорилось, что наша шведская валюта использует неправильный разделитель десятичной дроби.Форматирование валюты в Android с использованием неправильного десятичного разделителя

NumberFormat enUS = NumberFormat.getCurrencyInstance(Locale.US); 
NumberFormat enGB = NumberFormat.getCurrencyInstance(Locale.UK); 
NumberFormat svSE = NumberFormat.getCurrencyInstance(new Locale("sv", "SE")); 
double cost = 1020d; 
String fmt = "en_US: %s en_GB %s sv_SE %s"; 
String text = String.format(fmt, enUS.format(cost), enGB.format(cost), svSE.format(cost)); 
Log.e("Format", text); 

> Format﹕ en_US: $1,020.00 en_GB £1,020.00 sv_SE 1 020:00 kr 

Говорят, что формат должен быть «1 020,00 kr». Когда я проверяю объект формата, похоже, что он имеет decimalSeparator из «,» в таблице символов, но «moneySeparator» из «:».

Кто-нибудь знает, действительно ли: действительно ли это ошибка в Android/java или какой-либо обходной путь?

+0

Какую версию java вы используете? На 1.6.0_10 мой результат: 'en_US: $ 1,020.00 en_GB £ 1,020.00 sv_SE 1 020,00 kr', который показывает правильный формат. – ufis

ответ

5

Это как ваш пользователь говорит: В шведском тысячах разделитель - это пробел "", а десятичный разделитель - запятая "," и символ валюты "kr" (Krona). Так что двоеточие «:» определенно неверно.

Вы можете проверить его здесь: http://www.localeplanet.com/java/sv-SE/

Что Java версии вы используете? Он хорошо работает на моем рабочем столе 1.6.0_13

- обновление -

кажется, что на Android есть ошибка, но вы можете обойти ошибку, используя DecimalFormatSymbols так:

DecimalFormat svSE = new DecimalFormat("#,###.00"); 
    DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("sv", "SE")); 
    symbols.setDecimalSeparator(','); 
    symbols.setGroupingSeparator(' '); 
    svSE.setDecimalFormatSymbols(symbols); 

Это также выводит правильные разделители на Android.

+0

Да, определенно ошибка в Android. Я также обнаружил, что могу использовать символы .setMonetarySeparator (',') для того же эффекта. – Paul

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