Справочники, инструменты, документация

PHP: Форматирование чисел с помощью функции number_format()

Функция number_format() предоставляет лёгкий способ для вывода чисел в удобном для чтения формате.

При выводе чисел на веб странице отличным способом улучшить доступность информации является форматирование для облегчения восприятия. Например, число 123,456.78 воспринимается гораздо лучше, чем 123456.784321.

PHP функция number_format() предоставляет лёгкий способ форматировать числа для отображения. Можно отделять тысячи с помощью запятой или другого символа, выбирать символ для десятичной точки и определять количество десятичных знаков в дробной части числа для отображения (можно совсем не выводить дробную часть числа).

Основные опции форматирования чисел

По умолчанию number_format() принимает число для форматирования и возвращает строку, которая содержит отформатированное число, округлённое до ближайшего целого с разделением каждой группы тысяч с помощью запятой:

$myNumber = 1234567.89;

// Выводит "1,234,568"
echo number_format($myNumber);

Так как number_format() возвращает строку, которая содержит символы разделители, то использовать вывод функции number_format() в качестве числовых значений для последующих математических операций или функций нельзя. Поэтому, все вычисления надо производить в оригинальных числовых значениях, а форматировать результат с помощью number_format() только тогда, когда нужно показывать его пользователю.

Задаём количество знаков дробной части числа

Количество знаков в дробной части числа задаётся в качестве второго аргумента функции number_format(). Функция округляет число вверх или вниз до указанного количества десятичных знаков:

$myNumber = 123456.784321;

// Выводит "123,456.78"
echo number_format( $myNumber, 2 );

// Выводит "123,456.8"
echo number_format( $myNumber, 1 );

Использование различных символов разделителей

По умолчанию функция number_format() использует точку для отделения десятичной дробной части и запятую для разделения групп тысяч. Для того, чтобы использовать другие символы, нужно передать новый десятичный разделитель в качестве третьего аргумента в функцию, а новый разделитель тысяч — в качестве четвёртого аргумента.

Следующий пример демонстрирует форматирование чисел в соответствии с Французским стандартом — запятая используется для отделения дробной части числа, а пробел — для отделения групп тысяч.:

$myNumber = 123456.784321;

// Выводит "123 456,78"
echo number_format( $myNumber, 2, ',', ' ' );

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

$myNumber = 123456.784321;

// Выводит "123456.78"
echo number_format( $myNumber, 2, '.', '' );

Вы можете использовать PHP функцию localeconv() для определения текущих установок локали компьютера для десятичной точки и разделителя тысяч — чтобы установить их в функции number_format().