Как установить разделитель тысяч в Java? - PullRequest
111 голосов
/ 16 марта 2011

Как установить разделитель тысяч в Java? У меня есть строковое представление BigDecimal, я хочу установить разделитель тысяч и вернуть String.

Ответы [ 10 ]

207 голосов
/ 02 октября 2012

Вы можете использовать функцию форматирования с ",";

int no = 124750;
String str = String.format("%,d", no);

//str = 124,750

"," включает специфичные для локали символы группировки.

* 1007 документы *

96 голосов
/ 16 марта 2011

Это должно работать (не проверено, на основе 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, приведение в первой строке должно быть сохранено для большинства локалей.

48 голосов
/ 16 марта 2011
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()));
14 голосов
/ 27 января 2014

попробуйте этот код для форматирования, используемого в Бразилии:

    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 голосов
/ 16 марта 2011
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);
4 голосов
/ 29 сентября 2014
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
3 голосов
/ 20 июня 2014

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

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

Новая строка:

2 голосов
/ 06 июня 2017

Для десятичных знаков :

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));
0 голосов
/ 01 июля 2019

Если вы используете разделитель тысяч для целочисленного типа данных, используйте 1.

  1. Для целочисленных данных Тип

String.format ("%, d \ n",58625) и будет составлять 58,625

Для данных с плавающей точкой введите String.format ("%,. 2f", 58625,21) и выведите: 58,625.21
0 голосов
/ 19 января 2019

Как упомянуто выше, следующая ссылка дает вам конкретный код страны, чтобы позволить 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
...