關於MSSQL的decimal(numeric)、money、float的使用以及區別

來源:互聯網
上載者:User

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)類型了,此類型一般不提倡使用。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.