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來的好

arrow
arrow
    全站熱搜

    Louis 發表在 痞客邦 留言(2) 人氣()