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и настроить его в соответствии с вашими предпочтениями.
Поскольку я снова столкнулся с этой проблемой, я провел некоторые исследования и нашел более гибкое решение, предоставленное ICU :
NumberFormatter .withLocale(...) .unit(Currency.getInstance("USD")) .sign(SignDisplay.AUTO) // "123", "0", and "-123" .format(123) .toString();Проверьте документацию API NumberFormatter для получения более подробной информации.
Comments