Intereting Posts
Библиотека Android AAR в зависимости от другой библиотеки Как добавить детей к дочерним элементам, используя jsoup document Освободить память от конкретной деятельности, когда она уничтожена Как сделать запрос Volley JSONObject с настраиваемым объектом в качестве параметра? Проверка подтверждения подписки на приложение для Android в приложении с использованием php OpenSSL Как подражать продукту AndroidFlavors в чистом модуле java gradle? Android – Как получить обменные курсы валют Изменить порядок просмотров в линейном макете Совместное использование Android кода между тестом и androidTest Неожиданный конец данных блока в Gradle sync Расширяемый просмотр списка Ошибка: (27) Идентификатор ресурса не найден для атрибута 'srcCompat' в пакете 'com.example.jaisonjoseph.newsclient' Запуск задачи перед компиляцией с помощью Android Gradle plugin Что такое layout_collapseParallaxMultiplier, используемый в CollapsingToolbarLayout? Как я могу getText () из EditText в фрагменте и передать параметры волейбола?

Как изменить десятичный разделитель 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; } }