使用 decimal、float 與 real 資料

decimal 資料類型最多可以儲存 38 位數字,而且可以全部在小數點右邊。decimal 資料類型以確實的表示法儲存數字,而不是儲存值的近似值。

定義 decimal 資料行、變數與參數的兩個屬性如下:

  • p

    指定精確度,也就是物件可包含的位數。

  • s

    指定小數位數,也就是可放在小數點右邊的位數。

    p 和 s 必須遵守規則:0 <= s <= p <= 38。

numeric 和 decimal 資料類型的預設最大有效位數為 38。在 Transact-SQL 中,numeric 在功能上相當於 decimal 資料類型。

decimal 資料類型可用來儲存含小數的數字,而且資料值必須確實以指定的方式儲存。

如需數學運算如何影響結果的有效位數與小數位數的詳細資訊,請參閱<有效位數、小數位數和長度 (Transact-SQL)>。

使用 float 與 real 資料

float 和 real 資料類型也稱為近似資料類型。float 和 real 的行為遵循 IEEE 754 有關近似數值資料類型的規格。

近似數值資料類型不會儲存對許多數字指定的精確數值,而會儲存十分接近的近似值。針對許多應用程式來說,指定數值和所儲存近似值之間的些微差異並不值得注意。不過有時候這些差異卻又十分重要。由於 float 和 real 資料類型的近似本質,在需要精確數值行為時請勿使用這些資料類型,例如財務應用程式、牽涉到四捨五入的作業或者進行相等檢查作業時。反之,請使用 integer、decimal、money 或 smallmoney 資料類型。

避免在 WHERE 子句的搜尋條件中使用 float 或 real 資料行,尤其是 = 與 <> 運算子。最好將 float 和 real 資料行限制為 > 或 < 比較。

IEEE 754 規格提供四種四捨五入模式:四捨五入進位、無條件進位、無條件捨去與四捨五入到零。Microsoft SQL Server 則使用無條件進位。所有運算都準確到保證的精確度,但可能產生稍微不同的浮點值。因為浮點數的二進位表示法可以使用任一種有效的進位方式,所以不可能有效地限定浮點值。