decimal(numeric ) 同義,,用于精確存儲數(shù)值 float 和 real 不能精確存儲數(shù)值 decimal 數(shù)據(jù)類型最多可存儲 38 個數(shù)字,,所有數(shù)字都能夠放到小數(shù)點的右邊。decimal 數(shù)據(jù)類型存儲了一個準確(精確)的數(shù)字表達法,;不存儲值的近似值,。 定義 decimal 的列、變量和參數(shù)的兩種特性如下:
numeric 和 decimal 數(shù)據(jù)類型的默認最大精度值是 38,。在 Transact-SQL 中,numeric 與 decimal 數(shù)據(jù)類型在功能上等效,。 當數(shù)據(jù)值一定要按照指定精確存儲時,,可以用帶有小數(shù)的 decimal 數(shù)據(jù)類型來存儲數(shù)字。 float 和 real 數(shù)據(jù)float 和 real 數(shù)據(jù)類型被稱為近似的數(shù)據(jù)類型,。在近似數(shù)字數(shù)據(jù)類型方面,,float 和 real 數(shù)據(jù)的使用遵循 IEEE 754 標準,。 近似數(shù)字數(shù)據(jù)類型并不存儲為多數(shù)數(shù)字指定的精確值,它們只儲存這些值的最近似值,。在很多應用程序中,,指定值與存儲值之間的微小差異并不明顯。但有時這些差異也值得引起注意,。由于 float 和 real 數(shù)據(jù)類型的這種近似性,,當要求精確的數(shù)字狀態(tài)時,比如在財務應用程序中,,在那些需要舍入的操作中,,或在等值核對的操作中,就不使用這些數(shù)據(jù)類型,。這時就要用 integer,、decimal、money 或 smallmone 數(shù)據(jù)類型,。 在 WHERE 子句搜索條件中(特別是 = 和 <> 運算符),,應避免使用 float 或 real 列。最好限制使用 float 和 real 列做 > 或 < 的比較,。 IEEE 754 規(guī)格提供了四種舍入模式:舍入到最接近的值,、上舍入、下舍入和舍入到零,。Microsoft? SQL Server? 使用上舍入,。所有的數(shù)值必須精確到確定的精度,但會產(chǎn)生細小的浮點值變化,。因為浮點數(shù)字的二進制表示法可以采用很多合法舍入規(guī)則中的任意一條,,因此我們不可能可靠地量化一個浮點值。 轉(zhuǎn)換 decimal 和 numeric 數(shù)據(jù)對于 decimal 和 numeric 數(shù)據(jù)類型,,Microsoft? SQL Server? 將精度和小數(shù)位數(shù)的每個特定組合看作是不同的數(shù)據(jù)類型,。例如,decimal(5,5) 和 decimal(5,0) 被當作不同的數(shù)據(jù)類型,。 在 Transact-SQL 語句中,,帶有小數(shù)點的常量自動轉(zhuǎn)換為 numeric 數(shù)據(jù)值,且必然使用最小的精度和小數(shù)位數(shù),。例如,,常量 12.345 被轉(zhuǎn)換為 numeric 值,其精度為 5,,小數(shù)位為 3,。 從 decimal 或 numeric 向 float 或 real 轉(zhuǎn)換會導致精度損失。從 int、smallint,、tinyint,、float、real,、money 或 smallmoney 向 decimal 或 numeric 轉(zhuǎn)換會導致溢出,。 默認情況下,在將數(shù)字轉(zhuǎn)換為較低精度和小數(shù)位數(shù)的 decimal 或 numeric 值時,,SQL Server 使用舍入法,。然而,如果 SET ARITHABORT 選項為 ON,,當發(fā)生溢出時,,SQL Server 會出現(xiàn)錯誤。若僅損失精度和小數(shù)位數(shù),,則不會產(chǎn)生錯誤,。 |
|
來自: kittywei > 《sqlserver》