Подтвердить что ты не робот

Форматировать валюту без символа валюты

Я использую NumberFormat.getCurrencyInstance(myLocale) для получения пользовательского формата валюты для локали, указанной мной. Тем не менее, это всегда включает в себя символ валюты, который я не хочу, я просто хочу, чтобы соответствующий формат номера валюты для моей данной локали без символа валюты.

Выполнение format.setCurrencySymbol(null) вызывает исключение.

4b9b3361

Ответ 1

Следующие работы. Это немного уродливо, но он выполняет контракт:

NumberFormat nf = NumberFormat.getCurrencyInstance();
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
decimalFormatSymbols.setCurrencySymbol("");
((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
System.out.println(nf.format(12345.124).trim());

Вы также можете получить шаблон из формата валюты, удалить символ валюты и восстановить новый формат из нового шаблона:

NumberFormat nf = NumberFormat.getCurrencyInstance();
String pattern = ((DecimalFormat) nf).toPattern();
String newPattern = pattern.replace("\u00A4", "").trim();
NumberFormat newFormat = new DecimalFormat(newPattern);
System.out.println(newFormat.format(12345.124));

Ответ 2

Установите вместо него пустую строку:

DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setCurrencySymbol(""); // Don't use null.
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(12.3456)); // 12.35

Ответ 3

DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
String formatted = df.format(num);

Работает со многими типами для num, но не забывайте представлять валюту с помощью BigDecimal.

В ситуациях, когда ваш num может иметь более двух цифр после десятичной точки, вы можете использовать df.setMaximumFractionDigits(2) для отображения только двух, но это может скрыть только основную проблему от того, кто запускает приложение.

Ответ 4

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

NumberFormat fmt = NumberFormat.getCurrencyInstance(Locale.getDefault());
fmt.format(-1989.64).replace(fmt.getCurrency().getSymbol(), "");
//fmt.format(1989.64).substring(1);  //this doesn't work for negative number since its format is -$1989.64

Ответ 5

Данное решение сработало, но в итоге мы оставили некоторые пробелы для евро, например. Я закончил тем, что сделал:

numberFormat.format(myNumber).replaceAll("[^0123456789.,]","");

Это гарантирует, что у нас есть форматирование валюты для числа без валюты или любого другого символа.

Ответ 6

Двухстрочный ответ

NumberFormat formatCurrency = new NumberFormat.currency(symbol: "");
var currencyConverted = formatCurrency.format(money);

В TextView

new Text('${formatCurrency.format(money}'),

Ответ 7

существует потребность для формата валюты "БЕЗ символа", когда у вас есть огромные отчеты или представления, и почти все столбцы представляют собой денежные значения, символ раздражает, нет необходимости в символ, но да для разделителей тысяч и десятичной запятой. U нужна

new DecimalFormat("#,##0.00");

а не

new DecimalFormat("$#,##0.00");