2009-11-16 72 views
1

哪種數據類型最有效地存儲數字,例如11.111。在SQL Server中存儲數字11.111的最有效方式

這些數字在點前有兩位數,最多三位。

目前該列是'bigint',我猜測這將需要更改爲小數或浮點數。

任何幫助非常感謝。

感謝

+0

表示是否需要精確? – 2009-11-16 02:15:20

+0

等一下。整數怎麼樣?是不是浮動? 11.111是否浮動? – DarthVader 2009-11-16 02:16:20

+0

是的,它需要精確到點後的3分 – Chin 2009-11-16 02:19:37

回答

1

Bigint是一個整型數據類型,所以是的,沒有一些預處理步法就無法工作。你需要精確地存儲值,還是隻需要大概?二進制浮點類型(float,real)是高效且緊湊的,但並不完全代表許多十進制值,所以比較並不總是能給出您期望的結果,並且會累積錯誤。 decimal是一個不錯的選擇。精度5和標度3的小數(滿足您的要求)消耗5個字節。

請參閱有關十進制數據類型here的文檔以及一般數據類型here

+0

我很難選擇正確的答案,但我發現這是最有幫助的。也許我的問題措辭不是很好。謝謝 – Chin 2009-11-16 04:25:41

2

我認爲你有兩個選擇:乘以1000並存儲爲一個int(和出路劃分),或者只是存儲爲雙。隨着內存和硬盤空間變得如此便宜,它可能不值得進一步優化的麻煩。

+0

當你說雙倍你的意思是一個浮動權嗎?謝謝您的幫助。 – Chin 2009-11-16 03:46:45

5

如果您需要確切的表示形式,smallmoney數據類型使用4個字節。

這相當於使用一個int(4字節),並執行乘法/除法來處理小數位。

+0

不要認爲它變得比這小 – Amirshk 2009-11-16 02:28:02

0

使用十進制數據類型來設定確切的精度:

decimal(5,3) 
+0

使用5個字節....... – 2009-11-16 02:20:59

+0

是的,所以smallmoney – 2009-11-16 02:27:55

+0

smallmoney是4字節:http://msdn.microsoft.com/en-us/library/ms179882。 aspx – RickNZ 2009-11-16 16:01:52

2

你應該使用十進制數據類型。它存儲精確的浮點數

DECLARE @d decimal(5, 3) 
SET @d=12.671 
SELECT @d, DATALENGTH(@d) 

正如@Mitch指出的那樣,這將是5個字節大小。您需要額外支付一個字節,以便更輕鬆地計算值。

+1

使用5個字節....... – 2009-11-16 02:20:26

+1

..並且應該是DECIMAL(5,3) – 2009-11-16 02:21:37

相關問題