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

PHP 四捨五入精度控制:round() 函數完整指南

     編輯:PHP 綜合知識

在財務計算、統計展示、百分比格式化等場景中,數值精度控制是常見需求。PHP 內建 round() 函數提供靈活的四捨五入能力,支援正負精度參數,配合字符串格式化可輕鬆實現「保留一位小數並加百分號」等常見需求。

函數原型與參數

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
  • $val:待處理數值
  • $precision:小數位數(可為負數,表示十位、百位捨入)
  • $mode:捨入模式(PHP 5.3+),可選 PHP_ROUND_HALF_UP(默認)、PHP_ROUND_HALF_DOWN、PHP_ROUND_HALF_EVEN、PHP_ROUND_HALF_ODD

經典示例

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 (百位捨入)

// 百分比格式化:0.10456 → 10.5%
$num = 0.10456;
echo round($num * 100, 1) . '%'; // 輸出: 10.5%

浮點數精度陷阱與應對

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

echo round(2.675, 2); // 預期 2.68,實際輸出 2.67

解決方案:

  1. BCMath 高精度擴展:
    echo bcdiv(bcmul('2.675', '100'), '1', 2); // 2.68
  2. 字符串格式化:
    echo number_format(2.675, 2, '.', ''); // 2.68
  3. 整數運算法:金額以「分」為單位存儲為整數,顯示時除以 100 格式化

進階:自定義捨入函數

function round_chinese($val, $precision = 0) {
    // 解決 2.675 → 2.68 問題
    $factor = pow(10, $precision + 1);
    $temp = (int)($val * $factor);
    $last_digit = $temp % 10;
    $temp = (int)($temp / 10);
    if ($last_digit >= 5) $temp++;
    return $temp / pow(10, $precision);
}

echo round_chinese(2.675, 2); // 2.68

總結建議

  • 一般展示用 round() 或 number_format() 足矣
  • 財務/金融計算**必須**使用 BCMath 或整數分單位存儲
  • 注意 precision 為負數時的捨入行為(十位、百位)
  • PHP 5.3+ 可通過 $mode 參數控制「銀行家捨入」等特殊規則
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved