Formatting numbers in php

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.

Читайте также:  An http server home page php

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!

Matt Doyle headshot

Need a little help with your website? I have over 20 years of web development experience under my belt. Let’s chat!

Matt Doyle - Codeable Expert Certificate

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,».»,»,») .»,-«;
>

Читайте также:  Защита от дураков python

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

Читайте также:  Input form html параметры

$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;
?>

Источник

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() — Разбирает строку в соответствии с заданным форматом

Источник

Оцените статью