Форматировать валюту без символа валюты - PullRequest
55 голосов
/ 28 декабря 2011

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

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

Ответы [ 7 ]

52 голосов
/ 28 декабря 2011

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

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));
44 голосов
/ 28 декабря 2011

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

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
1 голос
/ 25 апреля 2019

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

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

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

1 голос
/ 16 апреля 2018

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

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
0 голосов
/ 07 мая 2019

Ответ в две строки

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

В TextView

new Text('${formatCurrency.format(money}'),
0 голосов
/ 12 октября 2016
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
String formatted = df.format(num);

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

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

0 голосов
/ 03 октября 2013

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

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

, а не

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