CREATE TABLE test (c1 FLOAT(10,2), c2 DECIMAL(10,2));
INSERT INTO test VALUES (131072.32, 131072.32);
SELECT * FROM test;
-- 結果:
-- c1 | c2
-- 131072.31 | 131072.32
FLOAT 欄位將 131072.32 存成 131072.31,這正是浮點數「近似值」特性導致的精度誤差。
| 類型 | 代表 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|---|
| 浮點數 | FLOAT、DOUBLE (REAL) | 定長下表示範圍極大 | 精度不準、有誤差 | 科學計算、近似值統計 |
| 定點數 | DECIMAL (NUMERIC) | 精確儲存、無誤差 | 範圍較小、佔用空間稍大 | 金額、價格、庫存等精度敏感數據 |
FLOAT 精確。DECIMAL(10,2) 等精確類型。ABS(a-b) < epsilon 容差判斷。NaN、Infinity、-Infinity 在排序、匯總時行為異常。