Number format: примеры (PHP)
number_format(float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ","): stringФункция number_format в PHP
Функция number_format() форматирует число, разделяя группы разрядов заданным разделителем. Она применяется для вывода чисел в удобочитаемом виде, особенно при работе с денежными суммами или большими числовыми данными.
Функция имеет две формы вызова:
- number_format(float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ",") - основная форма с четырьмя параметрами.
- 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
echo number_format(1234567.89, 2, null, null);
1,234,567.89
Похожие функции PHP
Функция money_format() форматирует число как денежную величину с учетом локали. Удалена в PHP 8.0.
Функция sprintf() позволяет сложное форматирование чисел с использованием спецификаторов формата, но без автоматического разделения разрядов.
echo sprintf('%01.2f', 1234567.89);
1234567.89
Класс 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
Метод 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
Параметры $decimal_separator и $thousands_separator стали nullable. При передаче null используются значения по умолчанию.
Добавлена поддержка экспоненциальной нотации в строковых числовых аргументах.
Исправлено поведение с числами, близкими к границам целочисленного типа.
Расширенные примеры
$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
$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
$userInput = '1234567.8912';
$formatted = number_format((float)$userInput, 2, '.', ',');
echo $formatted;
1,234,567.89
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
$price = 1234.567;
$discounted = $price * 0.85;
echo number_format($discounted, 2) . " (было " . number_format($price, 2) . ")";
1,049.38 (было 1,234.57)