Как установить разделитель тысяч в Java? У меня есть строковое представление BigDecimal, я хочу установить разделитель тысяч и вернуть строку.
Как установить разделитель тысяч в Java?
Ответ 1
Это должно работать (непроверено, на основе 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 листинг в первой строке должен быть сохранен для большинства локалей.
Ответ 2
Вы можете использовать функцию формата с параметрами ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," включает в себя специфические для локали символы группировки.
Ответ 3
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()));
Ответ 4
попробуйте этот код в формате, используемом в Бразилии:
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"
Ответ 5
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);
Ответ 6
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
Ответ 7
Принятый ответ должен быть действительно изменен, иначе он не будет работать. 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(символы);
Ответ 8
Для десятичных знаков:
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));
Ответ 9
Как упомянуто выше, следующая ссылка дает вам конкретный код страны, чтобы позволить 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
Ответ 10
Если вы используете разделитель тысяч для типа данных Integer, используйте 1.
- Для целочисленного типа данных
String.format("%, d\n", 58625) и вывод будет 58,625
- Для данных с плавающей точкой введите String.format("%,. 2f", 58625,21) и выведите 58 625,21.