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

PHP number_format() 截取小數不四捨五入技巧:減法偏移法詳解

     編輯:PHP 綜合知識

問題場景

number_format() 預設四捨五入,若需無條件捨去(向下取整到指定小數位),需技巧處理。

核心技巧:減法偏移

原理分析

目標位數偏移量說明
小數 1 位-0.05使第 2 位 < 5,避免進位
小數 2 位-0.005使第 3 位 < 5
小數 n 位-0.5 × 10⁻ⁿ通用公式
整數-0.5使小數部份 < 0.5

通用函式封裝

/**
 * 無條件捨去到指定小數位
 * @param float $num
 * @param int $precision 小數位數 (0 為整數)
 * @param string $decPoint 小數點符號
 * @param string $thousandsSep 千分位符號
 * @return string
 */
function number_floor(float $num, int $precision = 0, string $decPoint = '.', string $thousandsSep = ','): string {
    if ($precision < 0) $precision = 0;
    $offset = 0.5 * (10 ** -$precision);
    return number_format($num - $offset, $precision, $decPoint, $thousandsSep);
}

// 測試
echo number_floor(123456.6588, 2); // 123,456.65
echo number_floor(123456.6588, 0); // 123,456
echo number_floor(-1.999, 2);      // -1.99 (負數向零方向捨去)
?>

替代方案比較

方法優點缺點適用場景
減法偏移 + number_format一行搞定、格式化內建浮點數精度邊界極少數誤差一般金額顯示
bcmath: bcdiv/bcadd任意精度、無浮點誤差需擴展、字串運算較慢金融級計算
floor($num * 10ⁿ) / 10ⁿ純數學、無格式化需自行格式化輸出後續仍需運算
sprintf('%.2f', floor($num*100)/100)標準函式同浮點誤差簡單輸出

負數行為注意

上述方法對負數為向零捨去(-1.999 → -1.99)。若需向下取整(-1.999 → -2.00),改用 floor() 數學法。

工具推薦

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