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

MySQL 四捨五入函數家族實戰:ROUND、FLOOR、CEILING、TRUNCATE 精度控制全解析

     編輯:MySQL 綜合教學

MySQL 數值取整與四捨五入函數對照表

業務常見需求:金額保留 2 位小數、分頁計算向上取整、統計向下取整。MySQL 提供四大函數覆蓋所有場景。

函數對照表

函數語法行為返回類型典型場景
ROUNDROUND(X) / ROUND(X,D)四捨五入到整數或 D 位小數BIGINT / DECIMAL金額計算、評分顯示
FLOORFLOOR(X)向下取整(不大於 X 的最大整數)BIGINT分頁總頁數、索引下界
CEILING / CEILCEILING(X)向上取整(不小於 X 的最小整數)BIGINT分頁總頁數、批次數
TRUNCATETRUNCATE(X,D)截斷到 D 位小數(不四捨五入)DECIMAL強制保留小數位、去尾

實測示例

-- ROUND
SELECT ROUND(1.23);      -- 1
SELECT ROUND(1.58);      -- 2
SELECT ROUND(-1.58);     -- -2
SELECT ROUND(1.298, 1);  -- 1.3
SELECT ROUND(1.298, 0);  -- 1

-- FLOOR
SELECT FLOOR(1.23);      -- 1
SELECT FLOOR(-1.23);     -- -2  (注意負數方向)

-- CEILING
SELECT CEILING(1.23);    -- 2
SELECT CEILING(-1.23);   -- -1

-- TRUNCATE
SELECT TRUNCATE(1.298, 1);  -- 1.2
SELECT TRUNCATE(1.298, 0);  -- 1
SELECT TRUNCATE(-1.298, 1); -- -1.2

精度陷阱與最佳實踐

  1. 浮點數精度:FLOAT/DOUBLE 存儲為近似值,ROUND(1.235, 2) 可能得 1.23 而非 1.24。金額欄位務必用 DECIMAL(10,2)。
  2. 銀行家算法:MySQL ROUND 採用「四捨五入,五向偶數」(Banker's Rounding)。
    ROUND(1.5) = 2, ROUND(2.5) = 2。若需傳統「五進一」,用 TRUNCATE(X + 0.5, 0) 或應用層處理。
  3. 負數語義:FLOOR(-1.2) = -2、CEILING(-1.2) = -1,符合數學定義,業務邏輯需確認方向。
  4. 分頁計算:總頁數 = CEILING(total_rows / page_size) 或 (total_rows + page_size - 1) DIV page_size。

擴展:格式化輸出

SELECT FORMAT(1234567.89, 2);  -- '1,234,567.89' (含千分位,字串類型)
SELECT CONCAT('¥', FORMAT(price, 2));  -- 前端直用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved