方法對比速查表
| 函數 | 行為 | 返回類型 | 典型用例 |
floor() | 向下取整(捨去小數) | float | 分頁計算、索引下界 |
ceil() | 向上取整(進一法) | float | 分頁總頁數、資源配額 |
round() | 四捨五入(可指定精度) | float | 金額計算、統計展示 |
代碼示例與輸出
1. floor() — 向下取整
echo floor(4.3); // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4 (注意負數方向)
2. ceil() — 向上取整
echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(-3.14); // -3
3. round() — 四捨五入
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 (精度 -3 表示千位)
echo round(5.045, 2); // 5.04 (銀行家捨入:偶數優先)
echo round(5.055, 2); // 5.06
關鍵細節
- 返回類型均為 float:因 float 範圍大於 int,若需 int 請強制轉型
(int)floor($x)
- 負數方向:
floor 向 -∞,ceil 向 +∞
- 精度參數:
round($val, $precision) 支持負數(十位、百位...)
- 銀行家捨入:PHP 採用「四捨六入五成雙」,
5.045→5.04、5.055→5.06
- 浮點數精度陷阱:
floor(0.58*100) 可能得 57,建議 floor(round($val, 2)*100) 或用 BCMath
實戰選型指南
- 分頁總頁數:
ceil($total / $perPage)
- 數組分塊索引:
floor($index / $chunkSize)
- 貨幣金額分/元轉換:
round($yuan * 100) 或 bcadd/bcmul
- 統計平均值展示:
round($avg, 2)
- 隨機數縮放:
floor(mt_rand()/mt_getrandmax() * $max)
進階:BCMath 高精度替代
// 避免浮點誤差
bcmul('0.58', '100', 0); // '58'
bcdiv('10', '3', 2); // '3.33'
bcadd('1.234', '5.678', 3); // '6.912'