PHP 8.4.2 Released!

number_format

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

number_formatFormatiert eine Zahl mit Tausender-Trennzeichen

Beschreibung

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

Formatiert eine Zahl mit Tausender-Trennzeichen und optionalen Dezimalziffern und verwendet dabei das Kaufmännische Runden (aufrunden ab der Hälfte).

Parameter-Liste

num

Die zu formatierende Zahl.

decimals

Bestimmt die Anzahl an Nachkommastellen. Wenn der Wert 0 ist, wird das Dezimaltrennzeichen decimal_separator im Rückgabewert weggelassen. Wenn der Wert negativ ist, wird num seit PHP 8.3.0 auf decimals signifikante Stellen vor dem Dezimaltrennzeichen gerundet. Vor PHP 8.3.0 wurden negative Werte ignoriert und genauso behandelt wie 0.

decimal_separator

Bestimmt das Trennzeichen für die Nachkommastellen.

thousands_separator

Bestimmt das Tausendertrennzeichen.

Rückgabewerte

Eine formatierte Version von num.

Changelog

Version Beschreibung
8.3.0 Behandlung negativer Werte für decimals hinzugefügt.
8.0.0 Vor dieser Version akzeptierte number_format() einen, zwei oder vier Parameter (aber nicht drei).
7.2.0 number_format() wurde geändert, so dass es nicht mehr -0 zurückgeben kann; zuvor konnte -0 zurückgegeben werden, z. B. wenn num gleich -0.01 war.

Beispiele

Beispiel #1 number_format()-Beispiel

Beispielsweise notiert man in Frankreich normalerweise zwei Dezimalstellen mit einem Komma (',') als Trennzeichen sowie ein Leerzeichen (' ') zur Gruppierung der Tausender. Das folgende Beispiel zeigt verschiedene Varianten eine Zahl zu formatieren:

<?php

$number
= 1234.56;

// Englische Notation (Standard)
$english_format_number = number_format($number);
// 1,235

// Französische Notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// Englische Notation ohne Tausendergruppierung
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

?>

Beispiel #2 Ein negativer Wert für decimals

Seit PHP 8.3.0 wird ein negativer Wert für decimals verwendet, um die Anzahl der signifikanten Ziffern vor dem Dezimaltrennzeichen zu runden.

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

Siehe auch

  • money_format() - Formatiert eine Zahl als Währungs-Zeichenkette
  • sprintf() - Gibt einen formatierten String zurück
  • printf() - Liefert einen formatierten String
  • sscanf() - Überträgt einen String in ein angegebenes 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