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

PHP 取整函數完整比較:floor、ceil、round 與精度控制

     編輯:PHP 相關知識

三大取整函數核心差異

函數行為回傳型別適用場景
floor()向下取整(捨去小數)float分頁計算、索引邊界、價格向下取整
ceil()向上取整(進位)float分頁總頁數、資源配額向上、最小單位計算
round()四捨五入,支援精度float金額計算、統計顯示、科學計算

floor() — 向下取整

float floor(float $value)
// 回傳不大於 value 的最大整數(以 float 型別)

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

注意:回傳 float 而非 int,因為 float 範圍大於 int。若需整數可搭配 (int) 或 intval()。

ceil() — 向上取整

float ceil(float $value)
// 回傳不小於 value 的最小整數

echo ceil(4.3);     // 5
echo ceil(9.999);   // 10
echo ceil(-4.3);    // -4

round() — 四捨五入與精度控制

float round(float $val, int $precision = 0, int $mode = PHP_ROUND_HALF_UP)
// $precision:小數位數(正數=小數位、負數=十位百位...)
// $mode:PHP_ROUND_HALF_UP(預設)、HALF_DOWN、HALF_EVEN、HALF_ODD

基本用法

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(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06(銀行家進位規則)

負數精度(十位、百位進位)

echo round(1241757, -3); // 1242000(千位四捨五入)

浮點數精度陷阱與解決方案

PHP 浮點數遵循 IEEE 754,存在精度誤差:

echo round(2.675, 2); // 2.67 而非預期 2.68

解決方案:

  1. BCMath 高精度:bcdiv(bcmul($val, '100', 10), '1', 0) / 100
  2. 整數運算:金額以「分」為單位存儲運算,顯示時除以 100
  3. number_format:僅供顯示格式化,不改變實際值

實務應用範例

分頁總頁數計算

$totalItems = 105;
$perPage = 20;
$totalPages = (int)ceil($totalItems / $perPage); // 6 頁

商品價格顯示(四捨五入到分)

$price = 199.999;
echo 'NT$' . number_format(round($price, 2), 2); // NT$200.00

統計百分比

$rate = 100 / 3;
echo round($rate, 1) . '%'; // 33.3%

總結建議

  • 邊界計算用 floor/ceil,語意明確
  • 金額、比率、測量值用 round,指定 $precision
  • 財務關鍵計算務必使用 BCMath 或整數分單位
  • 顯示格式化用 number_format,區分「計算」與「顯示」
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved