一般在處理帶有小數點的數值我們會將資料型態設定為浮點數
而MSSQL中常見的浮點數有
- Real:儲存七位有效數
- Float:儲存十五位有效數
- Decimal:儲存三十七位數(包含小數點前面跟後面)
ex:Decimal(10,2)代表小數點前八位數,小數點後兩位數
用上次這幾種資料型態來儲存帶小數點的數值
EX:
以100000筆資料去加總
drop TABLE KKtable
go
CREATE TABLE KKtable
(
r1 REAL,f2 FLOAT, d3 DECIMAL(8,2)
)
DECLARE @count int
SET @count=0
WHILE (@count<100000)
BEGIN
INSERT INTO KKtable VALUES(0.1,0.1,0.1)
SET @count=@count+1
END
SELECT r1,f2,d3 FROM KKtable
SELECT SUM(r1),SUM(f2),SUM(d3) FROM KKtable
結果如下
---------------------- ---------------------- ---------------------------------------
10000.0001490116 10000.0000000188 10000.00
(1 row(s) affected)
結論
可以看到Real跟Float都產生了誤差
所以為了保存述職的正確性
還是使用Decimal比較好
期待您的留言

Comments