close
一般在處理帶有小數點的數值我們會將資料型態設定為浮點數
而MSSQL中常見的浮點數有
- Real:儲存七位有效數
- Float:儲存十五位有效數
- Decimal:儲存三十七位數(包含小數點前面跟後面),ex:Decimal(10,2)代表小數點前八位數,小數點後兩位數
用這幾種資料型態來儲存帶小數點的數值
舉例
輸入12345678901234567890,分別傳入三種資料型態的資料格位中
- Real:1.23456794E+19(七位數加後兩位誤差值)
- Float:1.2345678901234567E+19(十五位數加後兩位誤差值)
- Decimal(10,2):無法傳入=>Decimal(20,2):12345678901234567890.00
或許到這階段還看不出有什麼差別
舉例
以10000筆資料去加總
CREATE TABLE TEST
(
n1 REAL,n2 FLOAT, n3 DECIMAL(8,2)
)
DECLARE @CNT int
SET @CNT=0
WHILE (@CNT<10000)
BEGIN
INSERT INTO TEST VALUES(0.1,0.1,0.1)
SET @CNT=@CNT+1
END
SELECT n1,n2,n3 FROM TEST
SELECT SUM(n1),SUM(n2),SUM(n3) FROM TEST
結果
1000.00001490116 1000.00000000016 1000.00
可以看出Real跟Float分別都產生了誤差,Float因為有效位數較長所以誤差比較小
結論
雖然Decimal所占用的空間比較大,但為了保存數值的正確性上,還是比使用Real、Float來的好
全站熱搜
留言列表