Я использую класс PHP 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?
Редактировать: Я рад установить другую локаль, если это даст мне результат, который я ищу.
Редактировать 2: Глядя на документы библиотеки Intl (которая используется для реализации NumberFormatter), следующие предложения выглядели многообещающими:
¤ (\ u00A4): префикс или суффикс: без знака валюты, заменен символом валюты. При удвоении заменяется международным символом валюты. Если утроено, заменяется валютой во множественном числе, например, «доллар США» или «доллары США» для Америки. Если присутствует в шаблоне, вместо десятичного разделителя используется денежный десятичный разделитель.
Но это:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
Просто печатает "-¤123", так что радости нет.
Редактировать 3: Я думаю, что нашел ответ, см. Ниже.