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

PHP 四捨五入函數完整對比:floor、ceil、round、intval

     編輯:PHP 綜合知識

PHP 提供多種數值取整函數,行為差異常導致邏輯錯誤。本文系統對比 floor()、ceil()、round()、intval() 的規則與適用場景。

1. floor() — 向下取整

float floor(float $value)
// 返回不大於 value 的最大整數(負數變更小)
echo floor(1.6);   // 1
echo floor(-1.6);  // -2
echo floor(0.60);  // 0
echo floor(5.1);   // 5
echo floor(-5.1);  // -6
echo floor(-5.9);  // -6

特點:返回 float 型別、負數方向「遠離零」。

2. ceil() — 向上取整

float ceil(float $value)
// 返回不小於 value 的最小整數(負數變更大)
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3

特點:返回 float 型別、負數方向「趨向零」。

3. round() — 四捨五入(支援精度)

float round(float $val, int $precision = 0, int $mode = PHP_ROUND_HALF_UP)
// 預設四捨五入,precision 可為負數(十位、百位)
echo round(3.4);        // 3
echo round(3.5);        // 4
echo round(3.6);        // 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。

4. intval() — 強制轉整數(截斷小數)

int intval(mixed $var, int $base = 10)
// 直接捨棄小數部分,趨向零
echo intval(4.3);   // 4
echo intval(4.6);   // 4
echo intval(-4.6);  // -4
echo intval('abc'); // 0
echo intval('5fd'); // 5

特點:返回 int、字串轉換規則複雜(建議僅用於數值)。

對比總結表

函數3.7-3.7返回型別典型用途
floor3-4float分頁總頁數、向下取整
ceil4-3float向上取整、分頁計算
round4-4float四捨五入、金額精度
intval3-3int強制整數、陣列索引

實戰場景:分頁總頁數計算

$total = 105; // 總筆數
$per_page = 20; // 每頁筆數
$last_page = ceil($total / $per_page); // 6 頁
// 若用 floor(105/20)=5 會少一頁

浮點數精度陷阱

echo floor(0.58 * 100); // 57 (非 58!)
// 原因:0.58 無法精確表示為二進制浮點數
// 解決:使用 BCMath 或整數運算
echo floor(bcmul('0.58', '100', 0)); // 58

選擇原則:分頁用 ceil、金額用 round+BCMath、索引用 intval、統計下界用 floor。牢記浮點數精度問題,金融計算務必用 BCMath/GMP。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved