PHP 8.4.1 Released!

number_format

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

number_formatFormatear un número con los millares agrupados

Descripción

number_format(float $number, int $decimals = 0): string
number_format(
    float $number,
    int $decimals = 0,
    string $dec_point = ".",
    string $thousands_sep = ","
): string

Esta función acepta uno, dos, o cuatro parámetros (no tres):

Si solo se proporciona un parámetro, number será formateado sin decimales, pero con una coma (",") entre cada grupo de millares.

Si se proporcionan dos parámetros, number será formateado con tantos decimales como se hayan definido en decimals colocando un punto (".") delante, y una coma (",") entre cada grupo de millares.

Si se proporcionan los cuatro parámetros, number será formateado con tantos decimales como hayamos definido en decimals, dec_point sustituirá al punto (".") como seperador de los decimales y el separador por defecto de los millares, la coma (","), será sustituida por thousands_sep.

Parámetros

number

El número al que dar formato.

decimals

Establece el número de puntos decimales.

dec_point

Establece el separador para los decimales.

thousands_sep

Establece el separador para los millares.

Valores devueltos

Una versión formateada de number.

Historial de cambios

Versión Descripción
5.4.0 Esta función ahora admite múltiples bytes en dec_point y thousands_sep. En versiones anteriors solamente se utilizaba el primer byte de cada separador.

Ejemplos

Ejemplo #1 Ejemplo de number_format()

Por ejemplo, la notación francesa suele utilizar dos decimales, una coma (',') como separador decimal y el espacio (' ') como separador de millares. Esto consigue esto mediante las siguientes líneas:

<?php

$número
= 1234.56;

// notación inglesa (por defecto)
$número_formato_inglés = number_format($número);
// 1,235

// notación francesa
$nombre_format_francais = number_format($número, 2, ',', ' ');
// 1 234,56

$número = 1234.5678;

// notación inglesa sin separador de millares
$english_format_number = number_format($número, 2, '.', '');
// 1234.57

?>

Ver también

  • money_format() - Da formato a un número como un string de moneda
  • sprintf() - Devuelve un string formateado
  • printf() - Imprimir una cadena con formato
  • sscanf() - Interpreta un string de entrada de acuerdo con un formato

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