PHP Conference Japan 2024

number_format

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

number_format將數字格式化成千位分組

說明

number_format(
    浮點數 $num,
    整數 $decimals = 0,
    ?字串 $decimal_separator = ".",
    ?字串 $thousands_separator = ","
): 字串

使用四捨五入規則,將數字格式化成千位分組,並可選擇性地加上小數位數。

參數

num

要格式化的數字。

decimals

設定小數位數。如果為 0,則 decimal_separator 會從返回值中省略。從 PHP 8.3.0 開始,當值為負數時,num 會在小數點前四捨五入至 decimals 個有效位數。在 PHP 8.3.0 之前,負值會被忽略,並與 0 的處理方式相同。

decimal_separator(小數點分隔符號)

設定小數點的分隔符號。

thousands_separator(千位分隔符號)

設定千位分隔符號。

返回值

num 的格式化版本。

更新日誌

版本 說明
8.3.0 新增了對 decimals 負值的處理。
8.0.0 在此版本之前,number_format() 接受一個、兩個或四個參數(但不接受三個)。
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

?>

範例 #2 decimals 的負值

從 PHP 8.3.0 開始,decimals 的負值用於四捨五入小數點前的有效位數。

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

上述範例將輸出

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

另請參閱

新增註釋

使用者貢獻的註釋 7 則註釋

thomas at weblizards dot de
15 年前
文件中沒有明確說明;number_format 也會四捨五入

<?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
info at ensostudio dot ru
2 年前
注意:使用 NumberFormatter 將數字轉換為易於閱讀的格式,而不是使用註釋中的使用者函式
<?php
echo NumberFormatter::create('en', NumberFormatter::SPELLOUT)->format(12309); // twelve thousand three hundred nine
echo NumberFormatter::create('ru', NumberFormatter::SPELLOUT)->format(12307.5); // двенадцать тысяч триста семь целых пять десятых
?>
james at bandit dot co.nz
15 年前
輸出易於閱讀的數字。

<?php
# 輸出易於閱讀的數字
# 作者:james at bandit.co.nz
function bd_nice_number($n) {
// 首先移除任何格式;
$n = (0+str_replace(",","",$n));

// 這是數字嗎?
if(!is_numeric($n)) return false;

// 現在過濾它;
if($n>1000000000000) return round(($n/1000000000000),1).' 兆';
else if(
$n>1000000000) return round(($n/1000000000),1).' 十億';
else if(
$n>1000000) return round(($n/1000000),1).' 百萬';
else if(
$n>1000) return round(($n/1000),1).' 千';

return
number_format($n);
}
?>

輸出

247,704,360 -> 247.7 百萬
866,965,260,000 -> 867 十億
Jeroen de Bruijn [NL]
19 年前
如果您想要在沒有小數位數時顯示以 ,- 結尾的數字(例如 200,-),並在有小數位數時顯示小數,我會使用

function DisplayDouble($value)
{
list($whole, $decimals) = split ('[.,]', $value, 2);
if (intval($decimals) > 0)
return number_format($value,2,".",",");
else
return number_format($value,0,".",",") .",-";
}
Theo Diem
21 年前
如果您使用 number_format 函數,格式化數字可能會更容易。

我也寫了這個
function something($number)
{
$locale = localeconv();
return number_format($number,
$locale['frac_digits'],
$locale['decimal_point'],
$locale['thousands_sep']);
}

希望這有幫助 =)
[]'s
MarcM
18 年前
對於零填充 - 只需使用 sprintf() 函數

$pr_id = 1;
$pr_id = sprintf("%03d", $pr_id);
echo $pr_id;

//輸出 001
-----------------

$pr_id = 10;
$pr_id = sprintf("%03d", $pr_id);
echo $pr_id;

//輸出 010
-----------------

您可以將 %03d 更改為 %04d 等。
stm555 at hotmail dot com
19 年前
我遇到一個問題,我想要保留輸入的實數精度,而不是任意捨去使用者提交的內容。

我在格式化之前,透過快速拆分數字解決了這個問題。這樣我就可以分別格式化小數點的兩側。

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