Number format: примеры (PHP)

Форматирование чисел: работа с функцией number_format
Раздел: Форматирование
number_format(float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ","): string

Функция number_format в PHP

Функция number_format() форматирует число, разделяя группы разрядов заданным разделителем. Она применяется для вывода чисел в удобочитаемом виде, особенно при работе с денежными суммами или большими числовыми данными.

Аргументы функции

Функция имеет две формы вызова:

  1. number_format(float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ",") - основная форма с четырьмя параметрами.
  2. number_format(float $num, int $decimals = 0, string $decimal_separator = ".", string $thousands_separator = ",") - устаревшая форма без поддержки null.
Параметры
  • $num - форматируемое число (float или int).
  • $decimals - количество знаков после десятичной точки (необязательный, по умолчанию 0).
  • $decimal_separator - символ десятичного разделителя (необязательный, по умолчанию ".").
  • $thousands_separator - символ разделителя тысяч (необязательный, по умолчанию ",").

В PHP 8.0 параметры $decimal_separator и $thousands_separator стали nullable, что позволяет передавать null для использования значений по умолчанию.

Примеры использования

Базовые варианты
echo number_format(1234567.89);
1,234,568
echo number_format(1234567.89, 2);
1,234,567.89
Специальные разделители
echo number_format(1234567.89, 2, ',', ' ');
1 234 567,89
echo number_format(1234567.89, 3, '.', "'");
1'234'567.890
Использование null в PHP 8+
echo number_format(1234567.89, 2, null, null);
1,234,567.89

Похожие функции PHP

Функция money_format() форматирует число как денежную величину с учетом локали. Удалена в PHP 8.0.

sprintf

Функция sprintf() позволяет сложное форматирование чисел с использованием спецификаторов формата, но без автоматического разделения разрядов.

echo sprintf('%01.2f', 1234567.89);
1234567.89
numberfmt_format

Класс NumberFormatter из расширения intl предоставляет локалезависимое форматирование чисел, валют и процентов.

$fmt = new NumberFormatter('ru_RU', NumberFormatter::DECIMAL);
echo $fmt->format(1234567.89);
1 234 567,89

Аналоги в других языках

Number format в Python

Функция format() с спецификатором :n или метод locale.format_string().

print("{:,.2f}".format(1234567.89))
1,234,567.89

Number format в Javascript

Метод toLocaleString() объекта Number обеспечивает локалезависимое форматирование.

console.log((1234567.89).toLocaleString('en-US'))
1,234,567.89

Number format в MySQL

Функция FORMAT() форматирует число с заданным количеством десятичных знаков.

SELECT FORMAT(1234567.89, 2);
1,234,567.89
C#

Метод ToString() с форматом "N" или string.Format().

Console.WriteLine(1234567.89.ToString("N2"))
1,234,567.89

Типичные ошибки

Неправильный тип аргументов
echo number_format('не число');
Warning: number_format() expects parameter 1 to be float, string given
Отрицательное количество знаков
echo number_format(1234.56, -2);
Warning: number_format(): Argument #2 ($decimals) must be greater than or equal to 0
Многобайтовые разделители
echo number_format(1234.56, 2, '.', '...');
1...234.56
Потеря точности с большими числами
echo number_format(12345678901234567890, 2);
12,345,678,901,234,567,936.00

Изменения в версиях PHP

PHP 8.0

Параметры $decimal_separator и $thousands_separator стали nullable. При передаче null используются значения по умолчанию.

PHP 7.4

Добавлена поддержка экспоненциальной нотации в строковых числовых аргументах.

PHP 5.4

Исправлено поведение с числами, близкими к границам целочисленного типа.

Расширенные примеры

Форматирование массива чисел
Пример php
$numbers = [1234.56, 7890.12, 345.678];
foreach ($numbers as $n) {
    echo number_format($n, 2, ',', ' ') . "\n";
}
1 234,56
7 890,12
345,68
Динамическое форматирование
Пример php
$formatting = [
    [2, '.', ','],
    [3, ',', '.'],
    [0, '', ' ']
];
$value = 1234567.89;
foreach ($formatting as $params) {
    echo number_format($value, ...$params) . "\n";
}
1,234,567.89
1.234.567,890
1 234 568
Обработка пользовательского ввода
Пример php
$userInput = '1234567.8912';
$formatted = number_format((float)$userInput, 2, '.', ',');
echo $formatted;
1,234,567.89
Специальные случаи округления
Пример php
echo number_format(9.999, 2) . "\n";
echo number_format(0.001, 2) . "\n";
echo number_format(-1234.56, 2);
10.00
0.00
-1,234.56
Комбинирование с другими функциями
Пример php
$price = 1234.567;
$discounted = $price * 0.85;
echo number_format($discounted, 2) . " (было " . number_format($price, 2) . ")";
1,049.38 (было 1,234.57)

PHP number_format function comments

En
Number format Format a number with grouped thousands