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

PHP 取整函數完整對比:ceil、floor、round、intval 四大方法差異解析

     編輯:PHP 相關知識

四大取整函數速查表

函數行為回傳型別適用場景
ceil()向上取整(天花板)float分頁計算、資源配額向上
floor()向下取整(地板)float分頁總頁數、索引計算
round()四捨五入(可指定精度)float金額計算、統計顯示
intval()截斷小數/進制轉換int型別轉換、ID 處理、進制轉換

詳細行為對比

1. ceil() - 向上取整

<?php
echo ceil(3.4) . "\n";  // 4
echo ceil(3.5) . "\n";  // 4
echo ceil(3.9) . "\n";  // 4
echo ceil(-3.4) . "\n"; // -3 (向上 = 向零方向)
echo ceil(-3.9) . "\n"; // -3
// 回傳 float: 4.0, 4.0, 4.0, -3.0, -3.0

2. floor() - 向下取整

<?php
echo floor(3.4) . "\n";  // 3
echo floor(3.5) . "\n";  // 3
echo floor(3.9) . "\n";  // 3
echo floor(-3.4) . "\n"; // -4 (向下 = 遠離零方向)
echo floor(-3.9) . "\n"; // -4
// 回傳 float: 3.0, 3.0, 3.0, -4.0, -4.0

3. round() - 四捨五入

<?php
// 基本用法
echo round(3.4) . "\n";   // 3
echo round(3.5) . "\n";   // 4
echo round(3.6) . "\n";   // 4

// 指定精度(第二參數)
echo round(3.444, 2) . "\n"; // 3.44
echo round(3.445, 2) . "\n"; // 3.45
echo round(3.446, 2) . "\n"; // 3.45

// 負數精度:捨入到十位、百位
echo round(1234, -2) . "\n"; // 1200

// PHP 7.1+ 模式參數(第三參數)
echo round(1.5, 0, PHP_ROUND_HALF_UP) . "\n";   // 2 (預設)
echo round(1.5, 0, PHP_ROUND_HALF_DOWN) . "\n"; // 1
echo round(1.5, 0, PHP_ROUND_HALF_EVEN) . "\n"; // 2 (銀行家捨入)
echo round(2.5, 0, PHP_ROUND_HALF_EVEN) . "\n"; // 2 (銀行家捨入)

4. intval() - 整數轉換/截斷

<?php
// 截斷小數(向零取整)
echo intval(3.4) . "\n";   // 3
echo intval(3.9) . "\n";   // 3
echo intval(-3.4) . "\n";  // -3
echo intval(-3.9) . "\n";  // -3

// 進制轉換(第二參數:來源進制)
echo intval('10', 2) . "\n";   // 2  (二進制)
echo intval('10', 8) . "\n";   // 8  (八進制)
echo intval('10', 16) . "\n";  // 16 (十六進制)
echo intval('a', 16) . "\n";   // 10
echo intval('ff', 16) . "\n";  // 255

// 非數字字串
echo intval('abc') . "\n";     // 0
echo intval('123abc') . "\n";  // 123 (解析前綴數字)

負數行為關鍵差異總結

值ceilfloorroundintval
3.44333
3.54343
-3.4-3-4-3-3
-3.5-3-4-4-3
-3.6-3-4-4-3

實務應用場景

分頁計算

$total = 105; // 總筆數
$perPage = 20; // 每頁筆數

$totalPages = (int)ceil($total / $perPage); // 6 頁
// 或純整數運算避免浮點誤差
$totalPages = (($total + $perPage - 1) / $perPage) | 0; // 位運算取整

金額計算(分為單位避免浮點誤差)

$price = 19.99; // 元
$cents = (int)round($price * 100); // 1999 分

// 顯示時
echo 'NT$' . number_format($cents / 100, 2); // NT$19.99

陣列分塊處理

$items = range(1, 100);
$chunkSize = 7;
$chunks = (int)ceil(count($items) / $chunkSize); // 15 組

for ($i = 0; $i < $chunks; $i++) {
    $offset = $i * $chunkSize;
    $batch = array_slice($items, $offset, $chunkSize);
    processBatch($batch);
}

常見陷阱與注意事項

  • 浮點數精度:ceil(2.1 / 0.7) 可能得 4 而非 3,建議乘以 10 的冪次轉整數運算
  • 回傳型別:ceil/floor/round 回傳 float,嚴格比較需 (int) 轉型
  • 大數值:超出整數範圍時 intval 回傳不確定結果,使用 floor/ceil 處理浮點大數
  • 銀行家捨入:round() PHP 7.1+ 預設 PHP_ROUND_HALF_EVEN,財務系統需明確指定模式

快速選擇指南

  1. 需要不小於原值的整數 → ceil()
  2. 需要不大於原值的整數 → floor()
  3. 需要最接近的整數(可指定小數位) → round()
  4. 需要整數型別、截斷小數、或進制轉換 → intval()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved