number_format

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

number_format数字を千の位毎にグループ化してフォーマットする

説明

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

数値を千の位毎にグループ化し、オプションで小数の桁も追加してフォーマットします。小数の桁を追加する場合、四捨五入のルールを使います。

パラメータ

num

フォーマットする数値。

decimals

小数点以下の桁数。 0 を指定すると、 戻り値の decimal_separator は省略されます。

decimal_separator

小数点を表す区切り文字。

thousands_separator

千の位毎の区切り文字。

戻り値

num をフォーマットした結果を返します。

変更履歴

バージョン 説明
8.0.0 これより前のバージョンでは、 number_format() 関数は 引数を1個、2個、または4個受け入れていました(つまり、3個はダメでした)。
7.2.0 number_format() は、 -0 を返さないように変更されました。 これより前のバージョンでは、 num-0.01 のようなケースで -0 が返される場合がありました。

例1 number_format() の例

例えばフランスの表記法では、通常カンマ (',') を小数の区切りとした二桁の小数と、千位毎の区切りとしてスペース (' ') を用います。数値を書式設定するさまざまな方法を次の例で示します。

<?php

$number
= 1234.56;

// 英語での表記 (デフォルト)
$english_format_number = number_format($number);
// 1,235

// フランスの表記
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// 千位毎の区切りがない英語での表記
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

?>

参考

  • money_format() - 数値を金額文字列にフォーマットする
  • sprintf() - フォーマットされた文字列を返す
  • printf() - フォーマット済みの文字列を出力する
  • sscanf() - フォーマット文字列に基づき入力を処理する

add a note

User Contributed Notes 7 notes

up
423
thomas at weblizards dot de
16 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.000.002->0.000.003->0.000.004->0.000.005->0.010.006->0.010.007->0.010.008->0.010.009->0.01
up
8
info at ensostudio dot ru
3 years ago
Note: use NumberFormatter to convert in human-readable format instead  user function from comments:<?phpecho NumberFormatter::create('en', NumberFormatter::SPELLOUT)->format(12309); // twelve thousand three hundred nineecho NumberFormatter::create('ru', NumberFormatter::SPELLOUT)->format(12307.5); //  двенадцать тысяч триста семь целых пять десятых?>
up
38
james at bandit dot co.nz
16 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 million866,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
22 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
19 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
20 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