W3docs

money_format()

Статья о функции PHP money_format(), которая используется для форматирования числа в виде строки валюты. Функция полезна при работе с числами.

Функция money_format() форматирует число в виде строки валюты, применяя разделитель тысяч, десятичную точку и символ валюты в соответствии с активной локалью.

Важно: money_format() объявлена устаревшей в PHP 7.4 и удалена в PHP 8.0. Кроме того, она никогда не существовала в Windows. Если вы пишете новый код, сразу переходите к разделу Современная замена ниже — остальная часть страницы документирует устаревшую функцию, чтобы вы могли читать и поддерживать старый PHP-код.

Синтаксис

string money_format ( string $format , float $number )

Функция принимает два параметра:

  • $format – строка, описывающая способ форматирования числа. Она содержит одну или несколько спецификаций преобразования (каждая начинается с %), аналогично sprintf(). Любой текст вне спецификации выводится дословно.
  • $number – числовое значение для форматирования.

Функция возвращает отформатированную строку.

Основные спецификаторы формата

СпецификаторЗначениеПример вывода (en_US, 1234.56)
%nНациональный (местный) формат валюты$1,234.56
%iМеждународный формат валютыUSD 1,234.56
%.2nНациональный формат, 2 знака после запятой$1,234.56
%(nОтрицательные суммы в скобках($1,234.56)
%!nСкрыть символ валюты1,234.56

Локаль (задаётся с помощью setlocale()) определяет, какой символ валюты, символ группировки и десятичный разделитель используются.

Пример

<?php
$number = 1234.56;
setlocale(LC_MONETARY, 'en_US');
echo money_format('%n', $number);
?>

Здесь $number содержит значение с плавающей точкой, а вызов setlocale() настраивает денежную локаль на en_US. Вывод:

$1,234.56

Внимание: setlocale() возвращает false, если запрошенная локаль не установлена на сервере, и тогда money_format() молча использует локаль по умолчанию. Всегда проверяйте, что имя локали (например en_US или en_US.UTF-8) действительно существует в вашей системе.

Современная замена: NumberFormatter

Поскольку money_format() удалена в PHP 8, рекомендуемым подходом является класс NumberFormatter из расширения intl. Он учитывает локаль, работает на всех платформах (включая Windows) и использует данные ICU, а не системную локаль:

<?php
$number = 1234.56;

$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency($number, 'USD');
?>

Вывод:

$1,234.56

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

<?php
$number = 1234.56;

$de = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo $de->formatCurrency($number, 'EUR');
?>

Вывод (в немецкой группировке точка используется как разделитель тысяч, а запятая — как десятичный разделитель):

1.234,56 €

Что и когда использовать

  • Новый код: используйте NumberFormatter::formatCurrency() — это единственный форматировщик валюты, доступный в PHP 8+.
  • Устаревший код на PHP 7.4 или более ранней версии: money_format() всё ещё работает, но будет выдавать предупреждение об устаревании; планируйте миграцию.
  • Простые нефинансовые числа: если вам нужен только разделитель тысяч и фиксированное количество знаков после запятой (без символа валюты или правил локали), number_format() является более лёгким вариантом.

Связанные функции

  • number_format() – форматирование числа с группировкой тысяч.
  • setlocale() – установка локали, используемой money_format() и другими чувствительными к локали функциями.
  • sprintf() / printf() – форматирование строк общего назначения.
  • round() – округление значения перед его форматированием как денежной суммы.

Практика

Практика
Что делает функция 'money_format' в PHP?
Что делает функция 'money_format' в PHP?
Was this page helpful?