在 MySQL 中處理數值顯示時,經常需要將小數格式化為固定位數(例如保留兩位小數)。MySQL 提供了 FORMAT()、TRUNCATE() 和 CONVERT() 等函數,但它們的行為各有差異。本文將詳細對比這些方法,幫助你選擇最適合的方案。
FORMAT(X, D) 會將數字 X 格式化為 '#,###,###.##' 形式,保留 D 位小數並四捨五入,結果為 字串(String) 類型。整數部分超過三位時會自動加上逗號分隔。
SELECT FORMAT(12562.6655, 2);
-- 結果:'12,562.67'
mysql> SELECT FORMAT(12332.123456, 4);
-- '12,332.1235'
mysql> SELECT FORMAT(12332.1, 4);
-- '12,332.1000' (不足位數補零)
mysql> SELECT FORMAT(12332.2, 0);
-- '12,332' (D=0 時無小數點)
> ⚠️ **注意**:若不想要千分位逗號,FORMAT() 並不適合直接使用。
TRUNCATE(X, D) 會將數字 X 截斷到 D 位小數,**不進行四捨五入**,返回數值類型。
SELECT TRUNCATE(4545.1366, 2);
-- 結果:4545.13
> 此方法可避免逗號分隔,但若需四捨五入則不適用。
使用 CONVERT(value, DECIMAL(precision, scale)) 或 CAST(value AS DECIMAL(precision, scale)) 可將數值轉換為指定精度的 DECIMAL 類型,**會進行標準四捨五入**,且結果為數值類型,無逗號分隔。
SELECT CONVERT(4545.1366, DECIMAL(10,2));
-- 結果:4545.14 (四捨五入,無逗號,數值類型)
| 函數 | 四捨五入 | 千分位逗號 | 返回類型 | 適用場景 |
|---|---|---|---|---|
| FORMAT() | 是 | 有 | String | 報表顯示、需帶分隔符的字串輸出 |
| TRUNCATE() | 否 (截斷) | 無 | 數值 | 需單純截斷小數位 |
| CONVERT()/CAST() | 是 | 無 | 數值 (DECIMAL) | 計算、存儲、需標準四捨五入的數值處理 |
CAST(value AS DECIMAL(10,2)) 或 CONVERT(value, DECIMAL(10,2))。FORMAT()。TRUNCATE()。