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

MySQL 四捨五入函數全解析:FLOOR、CEILING、ROUND 行為差異與陷阱

     編輯:MySQL 綜合教學

函數對比表

函數語法含義返回類型範例
FLOORFLOOR(X)向下取整(不大於 X 的最大整數)BIGINTFLOOR(1.23)=1, FLOOR(-1.23)=-2
CEILINGCEILING(X)向上取整(不小於 X 的最小整數)BIGINTCEILING(1.23)=2, CEILING(-1.23)=-1
ROUNDROUND(X)四捨五入到整數BIGINTROUND(1.58)=2, ROUND(-1.58)=-2, ROUND(-1.23)=-1
ROUNDROUND(X, D)四捨五入保留 D 位小數DECIMALROUND(1.298,1)=1.3, ROUND(1.298,0)=1

關鍵行為差異與陷阱

  1. 負數四捨五入:MySQL 採用「遠離零」還是「銀行家捨入」?
    實測:ROUND(-1.5) = -2,ROUND(-1.4) = -1 → **標準四捨五入(絕對值 ≥ 0.5 進位)**,非銀行家捨入。
  2. 返回類型自動轉換:FLOOR/CEILING/ROUND(X) 返回 **BIGINT**;ROUND(X, D) 返回 **DECIMAL**。若作為進一步計算,需注意精度遞減。
  3. D 為負數:ROUND(123.45, -1) = 120(十位四捨五入),ROUND(123.45, -2) = 100。
  4. 浮點數精度陷阱:ROUND(1.005, 2) 可能得到 1.00 而非 1.01(二進制浮點無法精確表示 1.005)。財務計算請用 DECIMAL 型別存儲並計算。

最佳實踐建議

  • 金額/精度敏感欄位**定義為 DECIMAL(精度,標度)**,避免 FLOAT/DOUBLE。
  • 顯示層格式化建議在應用層處理(如 printf("%.2f")),資料庫僅存儲精確值。
  • 分頁/統計查詢中使用 ROUND 時,確認 D 參數型別符合預期。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved