2013-02-21 76 views
1

當你在表中使用decimal或float作爲數據類型時應該做什麼決定?Decimal或Float的決定

+1

可能的重複:http://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server,也看看MSDN文檔:http://msdn.microsoft .com/en-us/library/ms187912.aspx – Styxxy 2013-02-21 09:33:17

+0

引用[regexes]上的一個着名短語(http://en.wikiquote.org/wiki/Jamie_Zawinski)...有些人遇到問題時,認爲「我知道,我會用花車。」現在他們有兩個問題._ – xanatos 2013-02-21 09:41:55

回答

3

A float更小,性能更高,所以如果性能問題您可能想要與float一起去。

A decimal更適合重複準確的十進制數字。 A float以二進制形式存儲該數字,因此像10.2這樣的數量不能精確地存儲爲float,但它可以完全存儲爲decimal。如果精確的十進制表示比性能更重要,那麼您應該選擇decimal

0

一個整型,像57的值代表數字57精確。毫無疑問,它是否真的代表了更大的一點,或者更小一點。零值表示加性一致性(將任意值加零產生相同的值),值1表示乘性身份(將任意值乘以一得到相同的值),其他正值表示必須的次數加到零以達到它(例如,2是1 + 1,3是1 + 1 + 1等),並且任何負值表示相應正值的加法倒數。

對於二進制浮點類型,值不代表精確的數字。相反,除了一些哨兵值以外,每個浮點值都有一系列的數字,它應該被認爲是最好的表示;該範圍內的一個數字被視爲「面值」。 IEEE標準要求增加兩個浮點值應該產生通過增加它們的標稱值而產生的數字的最佳表示,但這並不意味着其標稱值正好是2000000.125的float實際上代表確切的數字量。它可能代表計算結果(例如20000000.0f/10.0f),其結果可以較好地代表float的值。

儘管Decimal類型提供的精度高於floatdouble,但它的主要用途是用於表示精確的小數(例如1.37)。類型的語義實際上更接近不精確類型的類型,如double,而不是像int這樣的精確類型,因爲添加例如萬億到數字,然後減去萬億可能會導致一個不同於起始值的數字。如果類型的目的是識別精確的小數部分,或者需要類型可提供的額外精度,那麼Decimal可能是一個很好的適合,儘管它的怪癖。否則,如果顯示爲1.37的值確實代表1.37是最好的方便表示的數字,但實際上它可能稍大或更小,那麼類型double將更加緊湊和更快地工作。

相關問題