Intereting Posts
Как изменить непрозрачность растрового изображения? PreferenceActivity значок активной панели действий не вернется домой (в отличие от ET :) Ошибка API Geofencing API с GPS? Динамическая сортировка CursorAdapter Android: отображение всплывающего диалогового окна при нажатии определенного слова в текстовом элементе Все фрагменты ViewPager ссылаются на один и тот же RecyclerView и / или Adapter Сканировать изображение и взять текст с него Как запретить пользователю отключать приложение для управления устройством через меню настроек? Как написать приложение для Android для чтения / записи sysfs? Хорошие шаблоны проектирования для кодирования многих HTTP-запросов в Android Как сделать AppBarLayout фоном прозрачным Цикл с файлом анимации XML? Запись видео в формате Android с ограничением продолжительности и низким качеством API API геолокации Android BroadcastReceiver не запускается Ошибка: «Невозможно сделать статическую ссылку на нестатический метод findViewById (int) из типа Activity"

Как изменить десятичный разделитель DecimalFormat от запятой до точки / точки?

У меня есть этот маленький сумасшедший метод, который преобразует значения BigDecimal в красивые и читаемые строки.

private String formatBigDecimal(BigDecimal bd){ DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(3); df.setMaximumFractionDigits(3); df.setMinimumIntegerDigits(1); df.setMaximumIntegerDigits(3); df.setGroupingSize(20); return df.format(bd); } 

Однако он также создает так называемый разделитель группировки "," который делает все мои значения такими:

 xxx,xxx 

Мне нужен разделитель как точка или точка, а не запятая. Кто-нибудь знает, как выполнить этот маленький подвиг?

Я прочитал это и, в частности, это до смерти, но я не могу найти способ сделать это. Я подхожу к этому неправильно? Есть ли более элегантный способ сделать это? Возможно, даже решение, которое учитывает разные локальные представления чисел, поскольку запятая была бы идеальна по европейским стандартам.

    Вы можете изменить разделитель либо путем установки языкового стандарта, либо с помощью DecimalFormatSymbols .

    Если вы хотите, чтобы разделитель группировки был точкой, вы можете использовать европейский язык:

     NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); DecimalFormat df = (DecimalFormat)nf; 

    В качестве альтернативы вы можете использовать класс DecimalFormatSymbols для изменения символов, отображаемых в форматированных числах, полученных методом формата. Эти символы включают десятичный разделитель, разделитель группировки, знак минус и знак процента, среди прочего:

     DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); otherSymbols.setDecimalSeparator(','); otherSymbols.setGroupingSeparator('.'); DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 
     public String getGermanCurrencyFormat(double value) { NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); nf.setGroupingUsed(true); return "€ " + nf.format(value); } 

    Европа довольно огромная. Я не уверен, что они используют один и тот же формат. Однако этот ответ поможет.

     String text = "1,234567"; NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY); double val = nf_in.parse(text).doubleValue(); NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK); nf_out.setMaximumFractionDigits(3); String output = nf_out.format(val); 

    Т.е. используйте правильный язык.

     String money = output.replace(',', '.'); 

    BigDecimal, похоже, не уважает настройки Locale.

     Locale.getDefault(); //returns sl_SI 

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

     a = new BigDecimal("1,2") //throws exception a = new BigDecimal("1.2") //is ok a.toPlainString() // returns "1.2" always 

    Я отредактировал часть моего сообщения, которое не имело смысла, поскольку оказалось, что это связано с человеческой ошибкой (забыл зафиксировать данные и искал неправильную вещь).

    То же, что BigDecimal можно сказать для любых функций Java .toString (). Я думаю, что это хорошо в некотором роде. Сериализация, например, или отладка. Существует уникальное строковое представление.

    Также, как упоминалось выше, использование форматировщиков работает нормально. Просто используйте formatters, то же самое для интерфейса JSF, formatters выполняют работу должным образом и знают о локали.

    Просто замените '.' С ',' в конце пользовательского интерфейса

     import java.text.DecimalFormat; public MyClass{ private String netAmount; private static DecimalFormat twoDecimalForm = new DecimalFormat("00.00"); public MyClass(double amount){ //converting to required decimal format in constructor or/and setter this.amount=twoDecimalForm.format(amount); } public String getAmount() { //replacing decimal point with comma so that in JSP ELs you'll get it in comma format return amount.replace(".",","); } public void setAmount(String amount) { this.amount = amount; } }