- Formatting Numbers with PHP’s number_format() Function
- Basic number formatting
- Specifying the number of decimal places
- Using different separators
- Summary
- Reader Interactions
- Leave a Reply Cancel reply
- Primary Sidebar
- Hire Matt!
- Stay in Touch!
- Recent Posts
- number_format
- Parameters
- Return Values
- Changelog
- Examples
- See Also
- User Contributed Notes 9 notes
- PHP number_format() Function
- Syntax
- Parameter Values
- Technical Details
- More Examples
- Example
- number_format
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
Formatting Numbers with PHP’s number_format() Function
When displaying a number in a Web page, it’s nice to format the number in an easy-to-read way. For example, 123,456.78 is nicer to read than 123456.784321 .
PHP’s number_format() function gives you an easy way to format numbers for displaying to the user. You can separate thousands with commas or other separators, choose the decimal point character, and choose the number of decimal places to display (or display no decimals at all).
Basic number formatting
In its most basic form, number_format() accepts a number to format, and returns a string containing the formatted number, rounded to the nearest whole number, with commas between each group of thousands:
$myNumber = 1234567.89; // Displays "1,234,568" echo number_format( $myNumber );
Since number_format() returns a string containing separator characters, you can’t use the output of number_format() as a numeric value with other math operators or functions. Therefore, make sure you do all your calculations on the original numeric value, and only convert the value to a string with number_format() when you’re ready to display it to the user.
Specifying the number of decimal places
To add decimal places to the formatted number, specify the number of decimals to add as the second argument. number_format() rounds the number up or down to the specified number of decimals:
$myNumber = 123456.784321; // Displays "123,456.78" echo number_format( $myNumber, 2 ); // Displays "123,456.8" echo number_format( $myNumber, 1 );
Using different separators
By default, number_format() uses a dot for the decimal point, and a comma for the thousands separator. To use different separators, pass the new decimal point separator as the third argument, and the new thousands separator as the fourth argument.
The following example displays a number using the French convention — a comma for the decimal point, and a space for the thousands separator:
$myNumber = 123456.784321; // Displays "123 456,78" echo number_format( $myNumber, 2, ',', ' ' );
If you wanted to display a number in English notation rounded to 2 decimal places, but without thousands separators, you could write the following:
$myNumber = 123456.784321; // Displays "123456.78" echo number_format( $myNumber, 2, '.', '' );
You can use PHP’s localeconv() function to find out the computer’s current locale settings for the decimal point and thousands separator — handy for plugging into number_format() .
Summary
number_format() gives you a simple way to display numbers in a nice, easy-to-read format. You’ve learned how to call number_format() , how to specify the number of decimals to display, and how to display numbers using a different thousands separator and decimal point.
Incidentally, if you need to display a number using words — for example, “one thousand two hundred and thirty-four” — check out the Numbers_Words PEAR module.
Reader Interactions
Leave a Reply Cancel reply
To include a block of code in your comment, surround it with
.
tags. You can include smaller code snippets inside some normal text by surrounding them with .
tags.
Allowed tags in comments: .
Primary Sidebar
Hire Matt!
Need a little help with your website? I have over 20 years of web development experience under my belt. Let’s chat!
Stay in Touch!
Subscribe to get a quick email whenever I add new articles, free goodies, or special offers. I won’t spam you.
Recent Posts
number_format
Formats a number with grouped thousands and optionally decimal digits using the rounding half up rule.
Parameters
The number being formatted.
Sets the number of decimal digits. If 0 , the decimal_separator is omitted from the return value.
Sets the separator for the decimal point.
Sets the thousands separator.
Return Values
A formatted version of num .
Changelog
Version | Description |
---|---|
8.0.0 | Prior to this version, number_format() accepted one, two, or four parameters (but not three). |
7.2.0 | number_format() was changed to not being able to return -0 , previously -0 could be returned for cases like where num would be -0.01 . |
Examples
Example #1 number_format() Example
For instance, French notation usually use two decimals, comma (‘,’) as decimal separator, and space (‘ ‘) as thousand separator. The following example demonstrates various ways to format a number:
// english notation (default)
$english_format_number = number_format ( $number );
// 1,235
// French notation
$nombre_format_francais = number_format ( $number , 2 , ‘,’ , ‘ ‘ );
// 1 234,56
// english notation without thousands separator
$english_format_number = number_format ( $number , 2 , ‘.’ , » );
// 1234.57
See Also
- money_format() — Formats a number as a currency string
- sprintf() — Return a formatted string
- printf() — Output a formatted string
- sscanf() — Parses input from a string according to a format
User Contributed Notes 9 notes
It’s not explicitly documented; number_format also rounds:
$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 , ‘.’ , ‘,’ ). «
» ;
?>
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
Note: use NumberFormatter to convert in human-readable format instead user function from comments:
echo NumberFormatter :: create ( ‘en’ , NumberFormatter :: SPELLOUT )-> format ( 12309 ); // twelve thousand three hundred nine
echo NumberFormatter :: create ( ‘ru’ , NumberFormatter :: SPELLOUT )-> format ( 12307.5 ); // двенадцать тысяч триста семь целых пять десятых
?>
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,».»,»,») .»,-«;
>
Outputs a human readable number.
# 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
For Zero fill — just use the sprintf() function
$pr_id = 1;
$pr_id = sprintf(«%03d», $pr_id);
echo $pr_id;
$pr_id = 10;
$pr_id = sprintf(«%03d», $pr_id);
echo $pr_id;
You can change %03d to %04d, etc.
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.
function number_format_unlimited_precision ( $number , $decimal = ‘.’ )
$broken_number = explode ( $decimal , $number );
return number_format ( $broken_number [ 0 ]). $decimal . $broken_number [ 1 ];
>
?>
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’]);
>
My simpler solution to the problem of the decimal number in this function being longer than the specified number of decimals.
Standard result for number_format() is..
number_format(5.00098, 2) = 5.00
My function will return the result = 5.001
// ** Warning: Does not work with scientific notation. Conversion to a real number is required. **
echo auto_decimal_format ( 5.0005620 ); // print 5.0006
echo auto_decimal_format ( 5.0009820 ); // print 5.001
echo auto_decimal_format ( 5.00098 , 8 ); // print 5.00098000
echo auto_decimal_format ( 1.0295691366783E-5 , 2 ); // print 0.00
function auto_decimal_format ( $n , $def = 2 ) $a = explode ( «.» , $n );
if ( count ( $a )> 1 ) $b = str_split ( $a [ 1 ]);
$pos = 1 ;
foreach ( $b as $value ) if ( $value != 0 && $pos >= $def ) $c = number_format ( $n , $pos );
$c_len = strlen ( substr ( strrchr ( $c , «.» ), 1 ));
if ( $c_len > $def ) < return rtrim ( $c , 0 ); >
return $c ; // or break
>
$pos ++;
>
>
return number_format ( $n , $def );
>
To prevent the rounding that occurs when next digit after last significant decimal is 5 (mentioned by several people below):
function fnumber_format ( $number , $decimals = » , $sep1 = » , $sep2 = » )
if (( $number * pow ( 10 , $decimals + 1 ) % 10 ) == 5 ) //if next not significant digit is 5
$number -= pow ( 10 , -( $decimals + 1 ));
return number_format ( $number , $decimals , $sep1 , $sep2 );
$t = 7.15 ;
echo $t . » | » . number_format ( $t , 1 , ‘.’ , ‘,’ ) . » | » . fnumber_format ( $t , 1 , ‘.’ , ‘,’ ) . «\n\n» ;
//result is: 7.15 | 7.2 | 7.1
$t = 7.3215 ;
echo $t . » | » . number_format ( $t , 3 , ‘.’ , ‘,’ ) . » | » . fnumber_format ( $t , 3 , ‘.’ , ‘,’ ) . «\n\n» ;
//result is: 7.3215 | 7.322 | 7.321
> ?>
have fun!
PHP number_format() Function
The number_format() function formats a number with grouped thousands.
Note: This function supports one, two, or four parameters (not three).
Syntax
Parameter Values
Parameter | Description |
---|---|
number | Required. The number to be formatted. If no other parameters are set, the number will be formatted without decimals and with comma (,) as the thousands separator. |
decimals | Optional. Specifies how many decimals. If this parameter is set, the number will be formatted with a dot (.) as decimal point |
decimalpoint | Optional. Specifies what string to use for decimal point |
separator | Optional. Specifies what string to use for thousands separator. Only the first character of separator is used. For example, «xxx» will give the same output as «x» |
Technical Details
Return Value: | Returns the formatted number |
---|---|
PHP Version: | 4+ |
Changelog: | As of PHP 5.4, this function supports multiple bytes in the parameters decimalpoint and separator. Only the first byte of each separator was used in older versions. |
More Examples
Example
You want to return a price: One parameter will round the number (it will be formatted without decimals). Two parameters should give the result you want:
$num = 1999.9;
$formattedNum = number_format($num).»
«;
echo $formattedNum;
$formattedNum = number_format($num, 2);
echo $formattedNum;
?>?php
number_format
Функция принимает один, два или четыре аргумента (не три):
Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой («,») между каждыми тремя цифрами.
Если переданы два аргумента, number будет отформатирован с decimals знаками после точки («.») и с запятой («,») между каждыми тремя цифрами.
Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделителем между между каждыми тремя цифрами, при этом в качестве десятичной точки будет использован dec_point , а в качестве разделителя групп — thousands_sep .
Список параметров
Устанавливает число знаков после запятой.
Устанавливает разделитель дробной части.
Устанавливает разделитель тысяч.
Возвращаемые значения
Возвращается отформатированное число number .
Список изменений
Версия | Описание |
---|---|
5.4.0 | Функция поддерживает многобайтную строку в качестве параметров dec_point и thousands_sep . В предыдущих версиях в качестве разделителя использовался только первый байт из каждого параметра. |
Примеры
Пример #1 Пример использования number_format()
Во Франции обычно используются 2 знака после запятой (‘,’), и пробел (‘ ‘) в качестве разделителя групп. Такое форматирование получается при использовании следующего кода:
// английский формат (по умолчанию)
$english_format_number = number_format ( $number );
// 1,235
// французский формат
$nombre_format_francais = number_format ( $number , 2 , ‘,’ , ‘ ‘ );
// 1 234,56
// английский формат без разделителей групп
$english_format_number = number_format ( $number , 2 , ‘.’ , » );
// 1234.57
Смотрите также
- money_format() — Форматирует число как денежную величину
- sprintf() — Возвращает отформатированную строку
- printf() — Выводит отформатированную строку
- sscanf() — Разбирает строку в соответствии с заданным форматом