ConFoo 2025

number_format

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

number_formatFormate un nombre pour l'affichage

Description

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

Formate un nombre avec les milliers groupés et optionnellement des chiffres décimaux utilisant la règle d'arrondi arrondi au plus proche.

Liste de paramètres

num

Le nombre à formater.

decimals

Définit le nombre de chiffres décimales. Si 0, le decimal_separator est omis de la valeur de retour. À partir de PHP 8.3.0, lorsque la valeur est négative, num est arrondi à decimals chiffres significatifs avant le point décimal. Avant PHP 8.3.0, les valeurs négatives étaient ignorées et traitées de la même manière que 0.

decimal_separator

Définit le séparateur pour le point décimal.

thousands_separator

Définit le séparateur des milliers.

Valeurs de retour

Une version formatée du nombre num.

Historique

Version Description
8.3.0 Ajout de la gestion des valeurs négatives pour decimals.
8.0.0 Antérieur à cette version, number_format() accepte un, deux, ou quatre paramètres (mais pas trois).
7.2.0 number_format() a été modifié pour ne plus permettre de retourner -0, précédemment -0 pouvait être retourné pour des cas où num valait -0.01.

Exemple #1 Une valeur négative pour decimals

À partir de PHP 8.3.0, une valeur négative pour decimals est utilisée pour arrondir le nombre de chiffres significatifs avant le point décimal.

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

L'exemple ci-dessus va afficher :

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

Exemples

Exemple #2 Exemple avec number_format()

En notation française, on utilise généralement deux chiffres après la virgule, une virgule comme séparateur décimal, et un espace comme séparateur de milliers. L'exemple suivant montre comment formater un nombre de différentes façons :

<?php

$number
= 1234.56;

// Notation anglaise (par défaut)
$english_format_number = number_format($number);
// 1,235

// Notation française
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// Notation anglaise sans séparateur de milliers
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

?>

Voir aussi

  • money_format() - Met un nombre au format monétaire
  • sprintf() - Retourne une chaîne formatée
  • printf() - Affiche une chaîne de caractères formatée
  • sscanf() - Analyse une chaîne à l'aide d'un format

add a note

User Contributed Notes 7 notes

up
423
thomas at weblizards dot de
15 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
8
info at ensostudio dot ru
2 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
38
james at bandit dot co.nz
15 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
6
Jeroen de Bruijn [NL]
19 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
8
Theo Diem
21 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
20
MarcM
18 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
15
stm555 at hotmail dot com
19 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];
}
?>
To Top