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

PHP 四大取整/四捨五入函數完全指南:ceil、floor、round、intval

     編輯:PHP 相關知識

前言

數值取整是高頻需求,PHP 提供四個核心函數,行為各異。本文通過表格、代碼、邊界測試全方位對比,助你精準選型。

函數對比速查表

函數行為返回類型典型場景
ceil向上取整(進一法)float分頁總頁數、向上計費
floor向下取整(捨去法)float向下計費、索引計算
round四捨五入,可指定精度float金額顯示、評分計算
intval截取整數部分(向零取整)int類型轉換、ID 解析

詳細講解與代碼驗證

1. ceil — 向上取整

<?php
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-4.3);   // -4 (注意:負數「向上」是趨向 0)
echo ceil(5);      // 5

// 分頁經典用法
$total = 100;
$perPage = 15;
$lastPage = (int)ceil($total / $perPage); // 7

2. floor — 向下取整

<?php
echo floor(0.60);  // 0
echo floor(0.40);  // 0
echo floor(5);     // 5
echo floor(5.1);   // 5
echo floor(-5.1);  // -6 (負數「向下」是遠離 0)
echo floor(-5.9);  // -6

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

<?php
echo round(0.60);        // 1
echo round(0.50);        // 1 (.5 進位,PHP 採用「銀行家捨入」?實測 0.5→1)
echo round(0.49);        // 0
echo round(-4.40);       // -4
echo round(-4.60);       // -5

// 精度控制
echo round(3.14159, 2);  // 3.14
echo round(3.14159, 3);  // 3.142
echo round(12345, -2);   // 12300 (負精度:十位、百位捨入)

// 注意:浮點數精度問題
echo round(2.675, 2);    // 2.67 而非 2.68 (二進制無法精確表示 2.675)
// 金額計算建議用 bcmath 或 integer(分) 存儲

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

<?php
echo intval(4.3);   // 4
echo intval(4.9);   // 4
echo intval(-4.9);  // -4 (向零取整)

// 字符串轉換
echo intval('42');      // 42
echo intval('5abc');    // 5 (從左解析數字直到非數字)
echo intval('abc');     // 0
echo intval('0xFF');    // 0 (不識別 0x 前綴,需用 intval('FF', 16))
echo intval('FF', 16);  // 255 (指定進制 base)

// 進制轉換
echo intval('100', 2);  // 4
echo intval('77', 8);   // 63

負數行為對比圖

值      | ceil | floor | round | intval
--------|------|-------|-------|-------
 4.3    |  5   |   4   |   4   |   4
 4.5    |  5   |   4   |   5   |   4
 4.8    |  5   |   4   |   5   |   4
-4.3    | -4   |  -5   |  -4   |  -4
-4.5    | -4   |  -5   |  -5   |  -4
-4.8    | -4   |  -5   |  -5   |  -4

常見陷阱與最佳實踐

  1. 返回類型是 float: ceil/floor/round 返回 float,需 (int) 強轉用於嚴格類型場景(如數組鍵、strict_types)。
  2. 浮點數精度: 金額計算禁用浮點數,統一用「分」為單位存整數,或用 bcmath 任意精度庫。
  3. round 銀行家捨入: PHP 8.0+ round() 新增 PHP_ROUND_HALF_EVEN 模式,金融場景可用 round($val, 2, PHP_ROUND_HALF_EVEN)。
  4. intval 字符串陷阱: '5abc' → 5,'abc' → 0,驗證 ID 時優先用 filter_var($id, FILTER_VALIDATE_INT)。

場景選型建議

  • 分頁總頁數、向上計費 → ceil
  • 向下兼容、數組索引 → floor 或 intval
  • 金額顯示、評分、百分比 → round($val, 2)
  • GET/POST 參數轉整型 ID → (int)$_GET['id'] 或 intval($_GET['id'])(同義,前者更快)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved