| 函數 | 行為 | 回傳型別 | 適用場景 |
|---|---|---|---|
floor() | 向下取整(捨去法) | float | 分頁計算、索引邊界 |
ceil() | 向上取整(進一法) | float | 分頁總數、資源配額 |
round() | 四捨五入(可指定精度) | float | 金額計算、統計顯示 |
echo floor(4.3); // 4
echo floor(9.999); // 9
echo floor(-4.3); // -5(注意負數方向)
關鍵特性: 永遠回傳 不大於 參數的最大整數。回傳型別為 float 以支援超大整數範圍。
echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(-4.3); // -4(負數向零方向)
關鍵特性: 永遠回傳 不小於 參數的最小整數。
// 基本用法
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
// 精度控制(第二參數)
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000(負精度:十位、百位...)
// 銀行家圓整法(PHP 5.3+)
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06(.5 時進位到偶數)
round(3.5, 0, PHP_ROUND_HALF_UP); // 4 (預設:.5 遠離零)
round(3.5, 0, PHP_ROUND_HALF_DOWN); // 3 (.5 趨向零)
round(3.5, 0, PHP_ROUND_HALF_EVEN); // 4 (銀行家圓整)
round(3.5, 0, PHP_ROUND_HALF_ODD); // 3 (進位到奇數)
$price = 19.99 * 100; // 1998.9999999999998
echo floor($price); // 1998(危險!)
echo round($price); // 1999(正確)
// 正確做法:使用 BCMath 或整數運算
echo floor(round($price, 2)); // 1999
| 值 | floor | ceil | round |
|---|---|---|---|
| -3.2 | -4 | -3 | -3 |
| -3.7 | -4 | -3 | -4 |
DECIMAL(10,2),PHP 用整數(分為單位)number_format($amount / 100, 2, '.', ',')$totalItems = 105;
$perPage = 10;
$totalPages = (int)ceil($totalItems / $perPage); // 11 頁
$offset = ($currentPage - 1) * $perPage;
三者效能相近,round() 因支援精度參數略慢。熱路徑中大量呼叫可考慮:
$intVal = (int)$floatVal; // 直接截斷,最快但行為等同 floor(正數)/ceil(負數)
floor()ceil()round()