下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當前位置:軟件下載吧 > 數(shù)據(jù)庫 > MS_SQL > SQL開發(fā)知識:詳細分析sqlserver中的小數(shù)類型(float和decimal)

          SQL開發(fā)知識:詳細分析sqlserver中的小數(shù)類型(float和decimal)

          時間:2024-02-05 12:47作者:下載吧人氣:33

          在SQL Server中實際上只有兩種小數(shù)數(shù)值類型,分別是float(近似數(shù)值)和decimal(精確數(shù)值),這兩種類型能表示所有的小數(shù)數(shù)值類型。

          float(近似數(shù)值類型)

          float表示的是近似數(shù)值,存在一定的精度缺失。

          float(n)

          這里的n是以科學計數(shù)法存儲浮點數(shù)尾數(shù)的位數(shù),因此此參數(shù)決定了精度和存儲的大小。其是可選的,默認值是53,即float等價于float(53),占用8bytes。如果指定了n,則它必須是介于1至53之間的值。實際上,雖然n的取值范圍定義是1至53,但實際上float只能表示float(53)和float(24)兩種類型,分別占用8bytes和4bytes。

          n的范圍 精度 存儲大小
          1-24(都視為24) 7位小數(shù) 4bytes
          25-53(都視為53) 15位小數(shù) 8bytes 

          使用近似數(shù)值要格外注意盡量避免相等比較,因為比如1可以被存儲為1.000000056,也可以被存儲為1.00000000672,進行相等比較會得到意料之外的結(jié)果。

          decimal(精確數(shù)值類型)

          decimal表示的是精確數(shù)值類型。不存在精度損失,別名是numeric。

          decimal(p, s)
          — 等價于
          numeric(p, s)

          精確數(shù)值類型需要分別指定小數(shù)的最大位數(shù)(p)和小數(shù)位的數(shù)量(s):

          • p(precision):指定小數(shù)的最大位數(shù),小數(shù)點的左側(cè)和右側(cè)的數(shù)字的總數(shù)量不能超過p,p的取值范圍是從1到38,默認值為18。
          • s(scale):指定在小數(shù)點右側(cè)的小數(shù)位數(shù),p-s是小數(shù)點左邊的最大位數(shù)。s必須是從0到p的值,只有在指定了精度的情況下才能指定s,s的默認值是0,因此,0 <= s <= p。

          p的大小也同時決定了存儲位數(shù)的大?。?/p>

          精度大小 存儲位數(shù)
          1-9 5
          10-19 9
          20-28 13
          29-38 17

          因為p和s必須遵守規(guī)則:0 <= s <= p <= 38,所以decimal(p, s)實際上能夠表示的有效值是從-10^38+1到10^38-1。這就意味著,decimal數(shù)據(jù)類型的最大精度是38,即最多可以存儲38位數(shù)字,所有這些數(shù)字均可位于小數(shù)點后面。decimal數(shù)據(jù)類型存儲精確的數(shù)字表示形式,沒有近似值。

          小數(shù)的除法

          小數(shù)的除法實際上是近似運算,因此在使用除法的時候SQL Server會自動將小數(shù)的類型提升為float類型(隱式數(shù)據(jù)類型升級)。

          小數(shù)常量的默認數(shù)據(jù)類型是decimal,但是float類型的優(yōu)先級比decimal類型要高。在默認的情況下,SQL Server會將小數(shù)數(shù)值的常量自動轉(zhuǎn)換為decimal數(shù)據(jù)類型(常態(tài)下),而在進行小數(shù)的除法運算的時候,則會就近進行數(shù)據(jù)類型的升級,轉(zhuǎn)換為float(24)或float(53)數(shù)據(jù)類型(運算時)。

          簡單舉個例子,常量12.345在常態(tài)下會被解析并轉(zhuǎn)換為numeric(5, 3)的數(shù)值類型,即使用最小精度5和最小小數(shù)位數(shù)3;而在運算除法時,比如12.345/2則會被解析并轉(zhuǎn)換為float(24),即最小精度的近似數(shù)值類型。

          小數(shù)轉(zhuǎn)為字符串

          相比cast(float_expression as float(24/53)),使用str()函數(shù)更能夠有效控制近似數(shù)值的小數(shù)位數(shù),因為str()函數(shù)獲取的是近似數(shù)值。

          str(float_expression [ , length [ , decimal ] ])

          標簽MSSQL,SQLServer,技術文檔,數(shù)據(jù)庫,SQLSERVER

          相關下載

          查看所有評論+

          網(wǎng)友評論

          網(wǎng)友
          您的評論需要經(jīng)過審核才能顯示

          熱門閱覽

          最新排行

          公眾號

          主站蜘蛛池模板: 欧洲精品一区二区三区在线观看| 精品视频在线观看一区二区三区| 亚洲视频一区网站| 色久综合网精品一区二区| 亚洲AV无码一区二区三区电影| 国模吧一区二区三区精品视频| 日韩精品一区二三区中文| 国产熟女一区二区三区四区五区 | 国产精品高清一区二区三区| 91福利视频一区| 日本一区二区三区久久| 国产一区二区视频在线播放| 一区二区三区高清| 一区二区三区电影网| 91大神在线精品视频一区| 精品一区二区三区视频在线观看| 亚洲毛片αv无线播放一区| 伊人久久精品一区二区三区| 一区二区三区电影在线观看| 精品一区二区三区四区在线播放| 国产日韩视频一区| 日本伊人精品一区二区三区| 国产伦精品一区三区视频| 无码乱人伦一区二区亚洲| 精品视频在线观看一区二区三区| 末成年女A∨片一区二区| 视频精品一区二区三区| 秋霞无码一区二区| 99精品国产一区二区三区| 亚洲综合在线一区二区三区| 国产午夜精品一区理论片| 国产伦精品一区二区三区在线观看 | 亚洲一区二区三区在线观看网站| 午夜无码视频一区二区三区| 国产精品福利一区二区| 久久亚洲综合色一区二区三区| 在线视频国产一区| 亚洲欧美国产国产一区二区三区| 国产探花在线精品一区二区| 夜色阁亚洲一区二区三区| 精品少妇人妻AV一区二区 |