引言
今天和測試溝通一個百分比計算方式時遇到一個問題, 我在存儲過程里用到了強轉CAST(32.678 AS DECIMAL(5,1)) 我認為該方式只會保留一位小數,我給測試的回復是我並沒有用到四舍五入函數,數據也沒有四舍五入,而測試說他們自己驗證后覺的數據是經過四舍五入了的。 想到這里於是我再試了試存儲過程的每個計算點,才發現了這個問題。
ROUND
那么用到四舍五入並且保留小數點時我們肯定會首選ROUND函數, 如果字段的數據類型是decimal(18,10)時那么四舍五入后還會有很多0出現。
CAST和CONVERT
其實我使用強轉時並沒有打算四舍五入結果,只是單純為了得到符合我要求的數據,今天才發現這兩個強轉也會四舍五入結果,也就是說下面三個語句將會返回相同的結果值
select ROUND(32.678,1) --32.700 select CAST(32.678 as DECIMAL(5,1)) --32.7 select convert(NUMERIC(5,1),32.678) --32.7
