Как отформатировать число для европейского языка

У меня есть Double: 5096,54. Мне нужно отформатировать его как: 5.096,54 (европейский формат валюты). Я безуспешно пытаюсь использовать этот код.

 Locale l = Locale.getDefault(); // ("fr" in my case)
 // Get the formatter for the specific locale
 NumberFormat formatter = NumberFormat.getNumberInstance(l);

 // Always 2 decimals
 formatter.setMinimumFractionDigits(2);
 formatter.setMaximumFractionDigits(2);

 // Format
 return formatter.format(d);

Вывод: 5 096,54, когда я ожидаю 5,096,54 Есть идеи, почему это не удается?


person Greg    schedule 10.06.2016    source источник
comment
большинство европейских форматов - это пробел в качестве разделителя тысяч и запятая в качестве десятичного разделителя ... но вы можете попробовать итальянский или норвежский язык   -  person Selvin    schedule 10.06.2016
comment
ideone.com/IHc6ID docs.oracle.com/cd/E19455-01/806-0169/overview-9/index.html   -  person Selvin    schedule 10.06.2016
comment
Спасибо всем за помощь, путаница возникает из-за того, что Locale fr является ФРАНЦУЗСКИМ (и вывод, например: 5 096,54), но в Бельгии французский язык должен быть 5.096,54. Итак, установка моей локали на «Язык l = new Locale (fr, BE);» исправил мою проблему   -  person Greg    schedule 10.06.2016


Ответы (2)


У меня работает с испанской локалью:

    Double d = 5096.54;

    Locale l = Locale.getDefault(); 

    NumberFormat formatter = NumberFormat.getNumberInstance(l);

    formatter.setMinimumFractionDigits(2);
    formatter.setMaximumFractionDigits(2);

    String d1 = formatter.format(d);

Результат: 5.096,54

Кажется, что французская локаль использует что-то похожее на пробел в качестве разделителя тысяч, вы можете проверить этот вопрос:

Java FRANCE/FRENCH Locale разделитель тысяч выглядит как космос, но не совсем

Они исправляют это с помощью этого обходного пути:

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols();
char thousandSep = symbols.getGroupingSeparator();

input =input.replace(thousandSep, '.'); 

Вы можете использовать тот же обходной путь или использовать испанскую локаль (или любую другую, которая соответствует вашим потребностям).

person SCouto    schedule 10.06.2016

Вы можете сделать следующее:

Locale l = Locale.getDefault();
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(l);

DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator('.'); // setting the thousand separator
// symbols.setDecimalSeparator(','); optionally setting the decimal separator

formatter.setDecimalFormatSymbols(symbols);
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);

String formattedString = formatter.format(yourDouble);
person earthw0rmjim    schedule 10.06.2016