Я использую класс PHP NumberFormatter для печати значений валюты.Как мне заставить NumberFormatter печатать отрицательные значения валюты со знаком минус?
Например:
$cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
$cFormatter->formatCurrency(123, 'USD');
$cFormatter->formatCurrency(123, 'BRL');
$cFormatter->formatCurrency(123, 'GBP');
Это прекрасно работает, и возвращает "$123.00
""R$123.00
", "£123.00
"соответственно, как и ожидалось
Но отрицательные числа печатаются. "Бухгалтерия стиля", окруженные скобками, вместо . ведущего минус "-"
например:
$cFormatter->formatCurrency(-456, 'USD');
Возврат "($456.00)"
, тогда как я хочу "-$456.00"
. Конечно, есть простой способ сделать это?
можно удалить скобки путем переопределения префикса и суффикса следующим образом:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");
Но тогда я не получаю символ валюты, например "-456.00"
.
Есть ли код выхода для символа валюты, который мне нужно использовать при настройке атрибута NEGATIVE_PREFIX?
Редактировать: Я рад установить другой язык, если это дает мне результат, который я ищу.
Edit 2: Глядя на Intl library docs (что библиотека используется для реализации NumberFormatter), следующие выглядели многообещающими:
¤ (\ u00A4): Префикс или суффикс: Нет Знак валюты, замененный по символу валюты. Если в два раза заменить символ международной валюты. Если втрое, заменить на двоичные имена в валюте, например, «доллар США» или «доллары США» для Америки. Если он присутствует в шаблоне, вместо десятичного разделителя используется денежный десятичный разделитель.
Но это:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
просто печатает "-¤123", так что никакой радости.
Редактировать 3: Я думаю, что нашел ответ, см. Ниже.
therefromhere: В свете «Я счастлив, чтобы установить другую локаль, если это дает мой результат, который я ищу ». См. Мой обновленный ответ: используйте en_AU. – hobodave