Как установить разделитель тысяч в Java?
У меня есть строковое представление BigDecimal, которое я хочу отформатировать с помощью разделителя тысяч и вернуть как String.
Как установить разделитель тысяч в Java?
У меня есть строковое представление BigDecimal, которое я хочу отформатировать с помощью разделителя тысяч и вернуть как String.
Ответы:
Это должно работать (непроверено, на основе JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Согласно JavaDoc, приведение в первой строке должно быть сохранено для большинства локалей.
getDecimalFormatSymbols()
говорит: Returns: a copy of the desired DecimalFormatSymbols
. Так что вы должны использовать setDecimalFormatSymbols(theCopy)
после изменения копии.
new
и вернуть его в форматтер: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
Вы можете использовать функцию форматирования с ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," включает символы группировки, зависящие от локали.
.
в качестве разделителя?
format()
с явным локал ( Local.US
как известно, использование в ,
качестве разделителя) , а затем заменить ,
с пользовательским сепаратором: String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. Или long
. Или BigInteger
. И используйте f, если хотите использовать double
, float
или BigDecimal
.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
РЕДАКТИРОВАТЬ
Чтобы получить настраиваемый разделитель группировки, например пробел, выполните следующие действия:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
объект с желаемыми свойствами и используете его для форматирования файла BigDecimal
. A BigDecimal
имеет только указанное значение, у него нет указанного формата.
попробуйте отформатировать этот код так, как он используется в Бразилии:
DecimalFormat df = new DecimalFormat(
"#,##0.00",
new DecimalFormatSymbols(new Locale("pt", "BR")));
BigDecimal value = new BigDecimal(123456.00);
System.out.println(df.format(value.floatValue()));
// results: "123.456,00"
parameters.put("REPORT_LOCALE", new Locale("pt", "BR"));
отправьте этот параметр в отчет.
Если вы используете разделитель тысяч для целочисленного типа данных, используйте 1.
String.format ("%, d \ n", 58625) и вывод будет 58 625
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');
String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);
String out = df.format(new BigDecimal(300000).doubleValue());
System.out.println(out);
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
Принятый ответ должен быть действительно изменен, иначе он не сработает. В getDecimalFormatSymbols делает защитную копию. Таким образом,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Новая строка такова: formatter.setDecimalFormatSymbols (символы);
Для десятичных знаков :
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));
Как упоминалось выше, следующая ссылка дает вам конкретный код страны, позволяющий Java локализовать номер. У каждой страны свой стиль.
По ссылке выше вы найдете код страны, который нужно разместить здесь:
...(new Locale(<COUNTRY CODE HERE>));
Швейцария, например, форматирует числа следующим образом:
1000,00 -> 1 000,00
Для этого у меня работают следующие коды :
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
Результат ожидаемый:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20