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

MySQL 浮點數與定點數精度陷阱:為什麼金額必須用 DECIMAL

     編輯:MySQL 綜合教學

MySQL 浮點數與定點數精度陷阱:為什麼金額必須用 DECIMAL

直觀案例

CREATE TABLE test (c1 FLOAT(10,2), c2 DECIMAL(10,2));
INSERT INTO test VALUES (131072.32, 131072.32), (999998.02, 999998.02);
SELECT * FROM test;
+-----------+-----------+
| c1        | c2        |
+-----------+-----------+
| 131072.31 | 131072.32 |  -- 浮點數丟失精度
| 999998.00 | 999998.02 |  -- 浮點數丟失精度
+-----------+-----------+

核心差異

類型分類優點缺點
FLOAT / DOUBLE浮點數定長下表示範圍極大精度丟失,不可用於精確計算
DECIMAL / NUMERIC定點數精確存儲,適合貨幣存儲空間稍大,範圍較小

工程落地四原則

  1. 浮點數存在誤差,嚴禁用於金額、價格、庫存等精度敏感場景;
  2. 此類業務強制使用 DECIMAL;
  3. 代碼中涉及浮點運算時,採用「整數分/厘存儲、展示再除」或專用庫(如 Java BigDecimal)規避比較陷阱;
  4. 注意浮點數特殊值(NaN、Infinity)處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved