У меня есть этот маленький сумасшедший метод, который преобразует значения 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
Мне нужно, чтобы разделитель был точкой или точкой, а не запятой. Кто-нибудь знает, как совершить этот маленький подвиг?
Я прочитал это и, в частности, это до смерти сейчас, но я не могу найти способ сделать это. Я подхожу к этому неправильно? Есть ли более элегантный способ сделать это? Может быть, даже решение, которое учитывает различные представления локальных номеров, поскольку запятая будет идеальной по европейским стандартам.
java
android
bigdecimal
decimal-point
decimalformat
MiraFayless
источник
источник
Ответы:
Вы можете изменить разделитель либо установив локаль, либо используя DecimalFormatSymbols .
Если вы хотите, чтобы разделитель группировки был точкой, вы можете использовать европейский язык:
В качестве альтернативы вы можете использовать класс DecimalFormatSymbols для изменения символов, которые появляются в отформатированных числах, созданных методом format. Эти символы включают в себя десятичный разделитель, разделитель группировки, знак минус и знак процента, среди прочего:
currentLocale можно получить из Locale.getDefault (), то есть:
источник
String formatString = "#,###,###,##0.00";
см. docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html для синтаксисаLocale.UK
что вернется,1,567.90
а не 1.567,90NumberFormat.getNumberInstance()
может работать необычно медленно на некоторых устройствах Android 7. Альтернатива,String.format()
которая работает быстро. См. Stackoverflow.com/questions/2379221/java-currency-number-formatЕвропа довольно огромна. Я не уверен, что они используют один и тот же формат. Однако тот или иной ответ поможет.
Т.е. используйте правильную локаль.
источник
источник
BigDecimal не соответствует настройкам Locale.
Словенский язык должен иметь десятичную запятую. Думаю, у меня были странные заблуждения относительно чисел.
Я отредактировал часть моего сообщения, которое не имело смысла, так как оно оказалось из-за человеческой ошибки (забыл зафиксировать данные и искал не ту вещь).
То же самое, что BigDecimal, можно сказать для любых функций Java .toString (). Я думаю, это хорошо в некоторых отношениях. Сериализация например или отладка. Существует уникальное строковое представление.
Также как и другие, упомянутые с помощью форматеров работает нормально. Просто используйте форматтеры, то же самое для внешнего интерфейса JSF, форматеры делают работу правильно и знают язык.
источник
источник