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

PHP 數值精確運算:四捨五入、取整與保留小數

     編輯:PHP 相關知識

PHP 處理浮點數精度是開發常見痛點。本文系統整理 sprintf、ceil、floor、round 等函數的精確用法,覆蓋保留小數、四捨五入、向上/向下取整等核心場景。

保留指定小數位

四捨五入保留 N 位

$num = 0.0215489;
echo sprintf("%.3f", $num); // 輸出:0.022

sprintf 格式化字符串,%.3f 表示保留 3 位小數並四捨五入。

截取不四捨五入(截斷)

$num = 0.0215489;
echo substr(sprintf("%.4f", $num), 0, -1); // 輸出:0.021

先保留多一位(4位),再截去最後一位,實現單純截斷效果。

整數取整操作

向上取整

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

常用於分頁計算:總頁數 = ceil(總條數 / 每頁條數)

向下取整

echo floor(4.3);   // 4
echo floor(9.999); // 9

round() 進階用法

round(float $num, int $precision = 0, int $mode = PHP_ROUND_HALF_UP)

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 (精度為負數,向左取整)
echo round(5.045, 2);   // 5.05
echo round(5.055, 2);   // 5.06

精度模式常量(PHP 5.3+)

  • PHP_ROUND_HALF_UP:四捨五入(預設)
  • PHP_ROUND_HALF_DOWN:五捨六入
  • PHP_ROUND_HALF_EVEN:銀行家算法(四捨六入五雙進)
  • PHP_ROUND_HALF_ODD:五捨六入五單進
// 銀行家算法示例
echo round(1.5, 0, PHP_ROUND_HALF_EVEN); // 2
echo round(2.5, 0, PHP_ROUND_HALF_EVEN); // 2

最佳實踐建議

  1. 財務計算:使用 BCMath 或 GMP 擴展,避免浮點數精度丟失
  2. 展示層格式化:用 number_format() 或 sprintf() 輸出
  3. 分頁邏輯:ceil($total / $perPage) 確保最後一頁顯示
  4. 避免直接比較浮點數:使用 abs($a - $b) < 0.0001 判斷相等

掌握這些函數特性,能有效解決 PHP 浮點數運算中的精度困擾。

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