好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 詳細分析sqlserver中的小數類型(float和decimal)

詳細分析sqlserver中的小數類型(float和decimal)

熱門標簽:優質地圖標注 奧威地圖標注多個地方 怎樣在地圖上標注路線圖標 外呼系統電銷專用 百度地圖標注不同路線 武漢長沙外呼系統方法和技巧 京華物流公司地圖標注 千呼電銷機器人價格 智能語音外呼系統選哪家

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

float(近似數值類型)

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

float(n)

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

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

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

decimal(精確數值類型)

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

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

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

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

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

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

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

小數的除法

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

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

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

小數轉為字符串

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

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

str()函數可以接受length、decimal兩個參數,皆是可選的。

  • length是小數的總位數,包含正負符號,小數點,小數點左邊和右邊數字個數之和;
  • decimal是小數位的數量(小數點右邊數字個數),小數位最大為16位,不能超過16,否則,會被截斷為16位。如果小數位沒有decimal多,那么右邊補0。
  • 返回值是varchar類型。

將decimal常量轉換為varchar類型:

select str(123.45, 10, 2); -- 123.45

將float表達式的值轉換為varchar類型(位數不足自動補0):

select str(1.0/3, 10, 8); -- 0.33333300

對小數常量轉換為varchar類型,減少小數位的數量,由2位減少為1位(會自動進行四舍五入運算):

select str(123.45, 6, 1); -- 123.5

使用函數str或cast將float和decimal強制轉換為varchar類型時,返回的數值可能是不相同的:

select str(56.64564684439527, 38, 20); -- 56.64564684438742000000
select cast(56.64564684439527 as varchar(100)); -- 56.64564684439527

這是因為兩種函數的處理方式的不同導致的:str()函數會對小數數值先取近似值;而cast()函數則是返回與原始值數據類型相同的值(decimal返回精確值,float返回近似值)。

以上就是詳細分析sqlserver中的小數類型(float和decimal)的詳細內容,更多關于sqlserver 小數類型的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 淺談sqlserver下float的不確定性
  • Sqlserver 表類型和表變量介紹
  • java sqlserver text 類型字段讀取方法
  • sqlserver中將varchar類型轉換為int型再進行排序的方法
  • SQLserver查詢數據類型為ntext是空或NULL值的方法
  • SQLSERVER 中datetime 和 smalldatetime類型分析說明

標簽:防疫戰設 天水 宿州 威海 來賓 銅仁 益陽 七臺河

巨人網絡通訊聲明:本文標題《詳細分析sqlserver中的小數類型(float和decimal)》,本文關鍵詞  詳細,分析,sqlserver,中的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳細分析sqlserver中的小數類型(float和decimal)》相關的同類信息!
  • 本頁收集關于詳細分析sqlserver中的小數類型(float和decimal)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 激情婷婷综合久久久久| 婷婷综合缴情亚洲狠狠图片| 日本人妻の乱老师和学生| 成人午夜性视频欧美成人| 黄色一级片录像| 菊豆电影| 日韩精品无码一区| 午夜色a大片在线观看免费| 欧美靠逼视频| 国产黄色的视频| 宝贝你的胸好大下面好紧| 18gay男同69亚洲网站| 国模超大尺度| 欧美爆操| 免费观看全黄做爰大片男男| 永德县| 程力灑水車的技術力量如何| 久久乐国产精品亚洲综合18| 夜夜躁狠狠躁日日躁XXOO| 91精品国产丝袜白色高跟鞋商品种类 | 久久久久久久一精品| 亚洲国产精品综合久久久| 被狠狠地操| 免费b2**站推广| 免费观看性生交大片人| 久久精品亚洲精品五月色| 最美情侣视频完整版免费观看| 久久精品美乳无码一区二区三区| 强脔孕妇系列h| 难忘的隔离十四天小说免费阅读 | 国产偷国产偷亚洲高清午夜| 师生小黄文| 久久91亚洲精品中文字幕| 国产高端极品外围AV在线| 50一60岁一级毛片女人| 男生脱裤子露蛋全程视频| 美女大黄三级视频在线观看| 女人把扒开给男人爽的| 男人J桶进女人P免费播放| A特级全过程片| 国产喷白浆一区二区三区动漫 |