PHP 處理浮點數精度是開發常見痛點。本文系統整理 sprintf、ceil、floor、round 等函數的精確用法,覆蓋保留小數、四捨五入、向上/向下取整等核心場景。
$num = 0.0215489;
echo sprintf("%.3f", $num); // 輸出:0.022
sprintf 格式化字符串,%.3f 表示保留 3 位小數並四捨五入。
$num = 0.0215489;
echo substr(sprintf("%.4f", $num), 0, -1); // 輸出:0.021
先保留多一位(4位),再截去最後一位,實現單純截斷效果。
echo ceil(4.3); // 5
echo ceil(9.999); // 10
常用於分頁計算:總頁數 = ceil(總條數 / 每頁條數)
echo floor(4.3); // 4
echo floor(9.999); // 9
round(float $num, int $precision = 0, int $mode = PHP_ROUND_HALF_UP)
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 (精度為負數,向左取整)
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
PHP_ROUND_HALF_UP:四捨五入(預設)PHP_ROUND_HALF_DOWN:五捨六入PHP_ROUND_HALF_EVEN:銀行家算法(四捨六入五雙進)PHP_ROUND_HALF_ODD:五捨六入五單進// 銀行家算法示例
echo round(1.5, 0, PHP_ROUND_HALF_EVEN); // 2
echo round(2.5, 0, PHP_ROUND_HALF_EVEN); // 2
number_format() 或 sprintf() 輸出ceil($total / $perPage) 確保最後一頁顯示abs($a - $b) < 0.0001 判斷相等掌握這些函數特性,能有效解決 PHP 浮點數運算中的精度困擾。