首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL FLOAT 求和精度問題解決方案

     編輯:MySQL 資料庫相關知識

FLOAT 欄位 SUM 精度丟失的兩種解法

FLOAT 為近似數值型別,直接 SUM() 常出現尾數誤差(如 0.1+0.2≠0.3)。

方法一:改用 DECIMAL(推薦)

將欄位型別改為 DECIMAL(16,6)(16 位總長,6 位小數),精確儲存與運算。遷移步驟:

  1. 新增臨時欄位 price_new DECIMAL(16,6)
  2. UPDATE t SET price_new = CAST(price AS DECIMAL(16,6))
  3. 驗證無誤後 DROP price; ALTER TABLE t CHANGE price_new price DECIMAL(16,6)

方法二:BINARY 強制二進制轉換(快速臨時方案)

SELECT SUM(a.number * BINARY(b.price)) AS total
FROM ler_card AS a
LEFT JOIN ler_items AS b ON a.itemId = b.itemId
WHERE user_id = 1;
  • BINARY 非函數,屬型別轉換運算子,強制後續運算式以二進制字串處理
  • 可繞過隱式型別轉換導致的精度問題
  • 僅適用於臨時查詢,**不建議長期依賴**

最佳實踐建議

  • 金額、精度敏感欄位**一律用 DECIMAL**
  • FLOAT/DOUBLE 僅用於科學計算、近似值場景
  • 應用層入庫前四捨五入至固定小數位,避免資料庫層面處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved