Як встановити роздільник тисяч у Java?
У мене є String-представлення BigDecimal, яке я хочу відформатувати за допомогою роздільника тисяч і повернути як String.
Як встановити роздільник тисяч у Java?
У мене є String-представлення 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()));
EDIT
Щоб отримати спеціальний розділювач групування, такий як пробіл, виконайте це:
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"));
Надішліть цей параметр для повідомлення.
Якщо ви використовуєте роздільник тисяч для типу даних Integer, використовуйте 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);
Прийнята відповідь має бути дійсно змінена, інакше не працює. У 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