decimal(numeric)、money、float(real) 都是MSSQL中的浮點類型的資料類型。
按儲存的範圍進行排序
float(real)
decimal(numeric)
money
在金額的儲存上可以優先money,如果金額過大採用decimal(numeric),極端的情況(資料超大)使用float(real)
money與float不會自動預設小數點位元,會自動插入的浮點值預設
例如:
CREATE TABLE #A
(
PRICE float
)
drop table #A
INSERT INTO #A
SELECT 100.1245678
UNION ALL
SELECT 101.123
UNION ALL
SELECT 102.12
UNION ALL
SELECT 103.1
UNION ALL
SELECT 103
SELECT * FROM #A
decimal(numeric)類型精度高,可以指定具體的小數點位元,自訂
CREATE TABLE #A
(
PRICE decimal(10,2)
)
drop table #A
INSERT INTO #A
SELECT 100.1245678
UNION ALL
SELECT 101.123
UNION ALL
SELECT 102.12
UNION ALL
SELECT 103.1
UNION ALL
SELECT 103
SELECT * FROM #A
float精度失真執行個體:
create table q(
money float(15,3)
);
然後插入這個資料:
insert into q values(1234567.234);
再select一下讀出來後發現,它顯示的是:
1234567.250
然後插入這個資料:
insert into q values(12345672.34);
再select一下讀出來後發現,它顯示的是:
12345672.000
也就是說,有10數位與以上的話就會出現不準確的情況。
如上可得出結論,數值儲存範圍越小的精度越高,儲存數值範圍越大,精度就越不準確,如果儲存正常金額的情況下,使用money,好處在於可以儲存不指定的小數點位元的數值,比較真實。如果對於既要求精度,又固定小數點位元的數值儲存,採用decimal(numeric),優點在於可以自訂小數點位元,精度高。如特殊情況,如數值範圍巨大隻能用float(real)類型了,此類型一般不提倡使用。