Пользовательское изменение NumberFormat для (голландского) языкового стандарта

У меня проблема. Я работаю с суммами в приложении, и мне нужно локализовать формат. Я использую NumberFormat.getCurrencyInstance() из java.util.Locale. В большинстве случаев это выглядит просто отлично. Но проблема в отрицательных числах. Предопределенный формат для голландской локали nl-NL выглядит следующим образом

€ 200,00-

но по стандартам в Нидерландах должно быть

€ -200,00

Пример NumberFormat.getCurrencyInstance(new Locale("nl", "NL")).format(-200). В противном случае я не хочу менять формат.

Любые идеи?


person jaruss    schedule 09.07.2013    source источник


Ответы (1)


Да, это довольно хорошо объясняет проблему (расхождение между CLDR, используемым Java, и официальной рекомендацией нидерландского языка).

Чтобы использовать формат, отличный от формата CLDR, вы должны определить его самостоятельно, используя формат по умолчанию для положительных значений и другой формат для отрицательных чисел:

((DecimalFormat)NumberFormat.getCurrencyInstance(new Locale("NL", "nl"))).applyPattern("¤ #,##0.00;¤ -#").format(-200);

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

¤ #,##0.00 — это текущий голландский шаблон по умолчанию для положительных значений, ¤ -# — это новый шаблон для отрицательных значений, который означает «сначала символ валюты, затем неразрывный пробел (т.е. \u00a0, а не обычный символ SPC), затем отрицательный символ, затем тот же формат как положительное значение" (; отделяет положительный формат значения от отрицательного в строке форматирования).

person desseim    schedule 10.07.2014