需求:2.12000 → 2.12、2.10000 → 2.1、2.00000 → 2,保留有效位數,去除尾部 0。
SELECT CAST(2.12000 AS DECIMAL(9,2)); -- 2.12
SELECT CAST(2.10000 AS DECIMAL(9,2)); -- 2.1
SELECT CAST(2.00000 AS DECIMAL(9,2)); -- 2
DECIMAL(9,2) 表示「總共 9 位數字,小數點後 2 位」。若不確定保留幾位,可用字符串處理:
SELECT TRIM(TRAILING '0' FROM TRIM(TRAILING '.' FROM CAST(num AS CHAR)));
但業務上通常精度固定(如價格 2 位、匯率 4/6 位),直接 CAST(... AS DECIMAL(p,s)) 最清晰、性能最好、可建索引。
FLOAT/DOUBLE 存儲本身不精確,轉 DECIMAL 前已有誤差,源頭務必用 DECIMAL 存儲。CAST 結果類型為 DECIMAL,應用層接收時注意類型映射(Java BigDecimal、Python Decimal、Go github.com/shopspring/decimal)。