Валюта USD в формате PHP — отрицательные числа

Мне нужно отобразить денежную сумму со знаком минус перед знаком $, если это отрицательное число.

E.g.:

$sum="-120";
echo "$".$sum;

Вывод будет:

$-120

Я хочу, чтобы результат был:

-$120

Я мог бы сделать это с помощью regex/str_replace/etc, но мне интересно, есть ли для этого встроенная функция PHP. Может быть, какой-то вариант в money_format или что-то подобное.

Спасибо.


person BenB    schedule 23.03.2015    source источник


Ответы (2)


money_format() сделает это, но вам нужно сначала использовать setlocale(), чтобы убедиться, что символ валюты установлен правильно:

setlocale(LC_MONETARY, 'en_US');
echo money_format('%+n', -123.45); // -$123.45

Рекомендации:

person Community    schedule 23.03.2015
comment
Спасибо, работает на сервере. Есть ли способ заставить эту функцию работать на локальном хосте в Windows? - person BenB; 24.03.2015

если в вашей конфигурации php установлен intl, вы тоже можете это сделать:

$fmt = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $fmt->formatCurrency($sum, "USD");
person Casimir et Hippolyte    schedule 23.03.2015
comment
Спасибо. Но это возвращает число внутри (123), а не -123. - person BenB; 24.03.2015
comment
@batz: у меня это работает в php 5.5, однако я прочитал в руководстве по php (в комментариях), что начиная с 5.6 он возвращает этот странный формат, заключенный в круглые скобки с en_US (это ошибка?) . Возможно, вы сможете получить ожидаемый результат с другим локалом, кроме en_US - person Casimir et Hippolyte; 24.03.2015