PHP 8.6.0 Beta 1 is available for testing

number_format

(PHP 4, PHP 5, PHP 7, PHP 8)

number_formatФорматирует число с группировкой классов многозначного числа

Описание

function number_format(
float $num,
int $decimals = 0,
? string $decimal_separator = ".",
? string $thousands_separator = ","
): string

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

Список параметров

num

Форматируемое число.

decimals

Задаёт количество десятичных разрядов. Значение параметра decimal_separator опускается в возвращаемом значении, если в параметр передали значение 0. Начиная с PHP 8.3.0 при отрицательном значении аргумента число num округляется до заданного в параметре decimals количества значащих чисел перед десятичной точкой. До PHP 8.3.0 функция игнорировала отрицательные значения и обрабатывала их как 0.

decimal_separator

Устанавливает разделитель дробной части.

thousands_separator

Устанавливает разделитель классов многозначного числа.

Возвращаемые значения

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

Список изменений

Версия Описание
8.3.0 Добавили ​​обработку отрицательных значений для параметра decimals.
8.0.0 До этой версии функция number_format() принимала один, два или четыре параметр, но не три.
7.2.0 Функцию number_format() изменили, чтобы не возвращать значение -0. Раньше функция иногда возвращала значение -0, если параметр num равнялся -0.01.

Примеры

Пример #1 Пример округления числа функцией number_format()

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

<?php
$number = 1234.56;
// Английская нотация (по умолчанию)
echo number_format($number), PHP_EOL;
// 1,235
// Французская нотация
echo number_format($number, 2, ',', ' '), PHP_EOL;
// 1 234,56
$number = 1234.5678;
// Английская нотация без разделителя классов многозначного числа
echo number_format($number, 2, '.', ''), PHP_EOL;
// 1234.57
?>

Пример #2 Пример форматирования числа с отрицательным значением в аргументе decimals

Начиная с PHP 8.3.0 отрицательное значение аргумента decimals округляет число до заданного количества значащих чисел перед десятичной точкой.

<?php
$number = "1234.5678";
var_dump(number_format($number, -1));
var_dump(number_format($number, -2));
var_dump(number_format($number, -3));
?>

Результат выполнения приведённого примера:

string(5) "1,230"
string(5) "1,200"
string(5) "1,000"

Смотрите также

  • money_format() - Форматирует число как денежную величину
  • sprintf() - Возвращает отформатированную строку
  • printf() - Выводит отформатированную строку
  • sscanf() - Разбирает строку по условиям формата

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 7 notes

up
435
thomas at weblizards dot de
17 years ago
It's not explicitly documented; number_format also rounds:
<?php
$numbers = array(0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009);
foreach ($numbers as $number)
 print $number."->".number_format($number, 2, '.', ',')."<br>";
?>

0.001->0.00
0.002->0.00
0.003->0.00
0.004->0.00
0.005->0.01
0.006->0.01
0.007->0.01
0.008->0.01
0.009->0.01
up
11
info at ensostudio dot ru
4 years ago
Note: use NumberFormatter to convert in human-readable format instead user function from comments:
<?php
echo NumberFormatter::create('en', NumberFormatter::SPELLOUT)->format(12309); // twelve thousand three hundred nine
echo NumberFormatter::create('ru', NumberFormatter::SPELLOUT)->format(12307.5); // двенадцать тысяч триста семь целых пять десятых
?>
up
40
james at bandit dot co.nz
17 years ago
Outputs a human readable number.
<?php
 # Output easy-to-read numbers
 # by james at bandit.co.nz
 function bd_nice_number($n) {
 // first strip any formatting;
 $n = (0+str_replace(",","",$n));
 
 // is this a number?
 if(!is_numeric($n)) return false;
 
 // now filter it;
 if($n>1000000000000) return round(($n/1000000000000),1).' trillion';
 else if($n>1000000000) return round(($n/1000000000),1).' billion';
 else if($n>1000000) return round(($n/1000000),1).' million';
 else if($n>1000) return round(($n/1000),1).' thousand';
 
 return number_format($n);
 }
?>

Outputs:
247,704,360 -> 247.7 million
866,965,260,000 -> 867 billion
up
8
Jeroen de Bruijn [NL]
20 years ago
If you want to display a number ending with ,- (like 200,-) when there are no decimal characters and display the decimals when there are decimal characters i use:
function DisplayDouble($value)
 {
 list($whole, $decimals) = split ('[.,]', $value, 2);
 if (intval($decimals) > 0)
 return number_format($value,2,".",",");
 else
 return number_format($value,0,".",",") .",-";
 }
up
18
MarcM
20 years ago
For Zero fill - just use the sprintf() function
$pr_id = 1;
$pr_id = sprintf("%03d", $pr_id);
echo $pr_id;
//outputs 001
-----------------
$pr_id = 10;
$pr_id = sprintf("%03d", $pr_id);
echo $pr_id;
//outputs 010
-----------------
You can change %03d to %04d, etc.
up
7
Theo Diem
23 years ago
formatting numbers may be more easy if u use number_format function.
I also wrote this :
function something($number)
{
 $locale = localeconv();
 return number_format($number,
 $locale['frac_digits'],
 $locale['decimal_point'],
 $locale['thousands_sep']);
}
hope this helps =)
[]'s
up
13
stm555 at hotmail dot com
21 years ago
I ran across an issue where I wanted to keep the entered precision of a real value, without arbitrarily rounding off what the user had submitted.
I figured it out with a quick explode on the number before formatting. I could then format either side of the decimal.
<?php
 function number_format_unlimited_precision($number,$decimal = '.')
 {
 $broken_number = explode($decimal,$number);
 return number_format($broken_number[0]).$decimal.$broken_number[1];
 }
?>
+Добавить

AltStyle によって変換されたページ (->オリジナル) /