Как установить разделитель тысяч в Java?

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

Ответ 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

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

docs

Ответ 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.

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

String.format("%, d\n", 58625) и вывод будет 58,625

  1. Для данных с плавающей точкой введите String.format("%,. 2f", 58625,21) и выведите 58 625,21.