Формат отрицательное сальдо в размере долларов США со знаком минус, а не в скобки (Ява)



Как заставить NumberFormat.getCurrencyInstance() печатать отрицательные значения валюты USD со знаком минус?

595   6  

6 ответов:

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

DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance();
String symbol = formatter.getCurrency().getSymbol();
formatter.setNegativePrefix(symbol+"-"); // or "-"+symbol if that's what you need
formatter.setNegativeSuffix("");

IIRC, Currency.getSymbol() может не возвращать значение для всех локалей для всех систем, но он должен работать для основных (и я думаю, что у него есть разумный запасной вариант, поэтому вам не нужно ничего делать)

Вот один, который я всегда использую либо в классе java, либо через тег fmt: formatNumber jstl:

DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00");
String formatted = format.format(15.5);

Он всегда производит по крайней мере $ 0.00 и является последовательным при отображении. Также включает в себя тысячи сеператоров, где это необходимо. Вы можете переместить знак минус перед знаком доллара, если это ваше требование.

Вероятно, лучше всего создать свой собственный DecimalFormat Если вы хотите определенный формат, а не полагаться на значение по умолчанию.

Edit: вы, вероятно, также можете привести результат NumberFormat.getCurrencyInstance () в DecimalFormat и настроить его в соответствии с вашими предпочтениями.

Попробуйте:

NumberFormat.getCurrencyInstance(Locale.CANADA);

NumberFormat.getCurrencyInstance(Locale.UK);

Поскольку я снова столкнулся с этой проблемой, я провел некоторые исследования и нашел более гибкое решение, предоставленное ICU :

NumberFormatter
  .withLocale(...)
  .unit(Currency.getInstance("USD"))
  .sign(SignDisplay.AUTO) // "123", "0", and "-123"
  .format(123)
  .toString();

Проверьте документацию API NumberFormatter для получения более подробной информации.

Comments

    Ничего не найдено.