首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 取整函數完全指南:floor、ceil、round 差異與精度控制

     編輯:PHP 相關知識

核心函數對照表

函數行為回傳型別適用場景
floor()向下取整(捨去法)float分頁計算、索引邊界
ceil()向上取整(進一法)float分頁總數、資源配額
round()四捨五入(可指定精度)float金額計算、統計顯示

floor():向下取整

echo floor(4.3);    // 4
echo floor(9.999);  // 9
echo floor(-4.3);   // -5(注意負數方向)

關鍵特性: 永遠回傳 不大於 參數的最大整數。回傳型別為 float 以支援超大整數範圍。

ceil():向上取整

echo ceil(4.3);     // 5
echo ceil(9.999);   // 10
echo ceil(-4.3);    // -4(負數向零方向)

關鍵特性: 永遠回傳 不小於 參數的最小整數。

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(負精度:十位、百位...)

// 銀行家圓整法(PHP 5.3+)
echo round(5.045, 2);   // 5.05
echo round(5.055, 2);   // 5.06(.5 時進位到偶數)

模式常數(PHP 5.3+)

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  (進位到奇數)

實戰陷阱與最佳實踐

1. 浮點數精度陷阱

$price = 19.99 * 100; // 1998.9999999999998
echo floor($price);     // 1998(危險!)
echo round($price);     // 1999(正確)

// 正確做法:使用 BCMath 或整數運算
echo floor(round($price, 2)); // 1999

2. 負數處理差異

值floorceilround
-3.2-4-3-3
-3.7-4-3-4

3. 金融計算建議

  • 儲存:資料庫用 DECIMAL(10,2),PHP 用整數(分為單位)
  • 顯示:number_format($amount / 100, 2, '.', ',')
  • 避免:直接對 float 做四則運算後再 round

4. 分頁計算範例

$totalItems = 105;
$perPage = 10;
$totalPages = (int)ceil($totalItems / $perPage); // 11 頁
$offset = ($currentPage - 1) * $perPage;

效能微差異

三者效能相近,round() 因支援精度參數略慢。熱路徑中大量呼叫可考慮:

$intVal = (int)$floatVal; // 直接截斷,最快但行為等同 floor(正數)/ceil(負數)

總結選擇指南

  • 需要 不超過原值 的整數 → floor()
  • 需要 不小於原值 的整數 → ceil()
  • 需要 數學四捨五入 或 指定小數位 → round()
  • 金融/會計場景 → 整數運算 + 格式化輸出,避免 float
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved