亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费

天津九安特機電工程有限公司

AI運營(yíng)推廣

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

這篇(°□°)文章主要介紹了sqlserver中的詳細型小數類(lèi)型的相關(guān)知識,文中講解非常細致,分析代碼幫助大家更好的數類(lèi)理解和學(xué)習,感興趣的詳細型朋友可以了解下

在SQL Server中實(shí)際上只有兩種小(′?`*)數數值類(lèi)型,分別是分析float(近似數值)和deciヾ(′▽?zhuān)??mal(精確(′_ゝ`)數值),這兩種類(lèi)型能表示所有的數類(lèi)小數數值類(lèi)型。

float(近似數值類(lèi)型)

float表示的詳細型是近似數值,存在一定的分析精度缺失。

float(n)

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

使用近似數值要格外注意盡量避免相等比較,因為比如1可以被存儲為1.000000056,也可以被存儲為1.00000??0??00672,進(jìn)行相等比較會(huì )得到意料之外的結果。

decimal(精確數值類(lèi)(lei)型)

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

decimal(p, s)

-- 等價(jià)于

numeric(p, s)

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

p(preci??sion):指定小數的最大位數,小數點(diǎn)的左側和右側的數字的總( ???)數量不能超過(guò)p,p的取值范圍是從1到38,默認值(′?ω?`)為18。

s(scale):指定在小數點(diǎn)右側的小數位數,p-s是小數點(diǎn)左邊的最大位數。s必須是從0到p的值,只有在指定了精度的情況下才能指定s,s的默認值是0,因此??,0 <= s <= p。

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

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

小數的除法

小數的除法實(shí)際上是近似運算,因此??在使用(yong)除法的時(shí)候SQL Server會(huì )自動(dòng)將小數的類(lèi)型提升為float類(lèi)型(隱式數據類(lèi)型升級??)。

小數常量的默認數據類(lèi)型??是decimal,但是floa??t類(lèi)型的優(yōu)先級比decimal類(lèi)型要高。在默認的情況下,SQL Server會(huì )將小數數值的常量自動(dòng)轉換為d(′Д` )ecimal數據類(lèi)型(常態(tài)下),而在進(jìn)行小數的除(??-)?法運算的時(shí)候(hou),則會(huì )就近進(jìn)行數(shu)據類(lèi)型的升級,轉換為float(24)或float(53)數據類(lèi)型(運算時(shí))。

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

小數轉為字符串

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

str(float_expres(′?_?`)sion [ , length [ , decimal ] ])

str()函數可以接受length、decima??l兩個(gè)參數,皆是可選的。

l??ength是小數的總位數,包含正(╬?益?)負符號,小數點(diǎn),小數點(diǎn)左邊和右邊數字個(gè)數之和;

decimal是小數位的數量(小數點(diǎn)??右邊數字個(gè)數),小數位最大為16位,不能超過(guò)16,否則,會(huì )被截斷為16位。如果(guo)小數位沒(méi)有decimal多,那么右邊補0(?Д?)。

返回值是varchar類(lèi)型。

將decimal常量轉(zhuan)換為varchar類(lèi)型:

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

將float表達(????)式的值轉換為varchar類(lèi)型(位數不足自動(dòng)補0):

s??elect str(1.0/3, 10, 8); -- 0.33333300

對小數常量轉換為varchar類(lèi)型,減少小數位的數量┐(′?`)┌,由2位減少為1位(會(huì )自動(dòng)進(jìn)行四舍五入運算):

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

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

s(◎_◎;)elect str(56.64564??684439527, 38, 20); -- 56.64564684438742000000
select cast(56.6456468443952(′ω`)7 as varchar(100)); -- 56.64564684439527

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

以上就是詳細分析sqlserver中的小數類(lèi)型(float和deciヽ(′▽?zhuān)?ノmal)ヾ(′▽?zhuān)??的詳細內容,更多關(guān)于sqlserver 小數類(lèi)型的資料請ヾ(^-^)ノ關(guān)注腳本之家其它相關(guān)文章!

來(lái)源:腳本之家

鏈接:ht??tps://www.jb51.n??et/article/189051.htm

亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费 视频| 霍邱县| 普安县| 大渡口区| 漳浦县| 大化| 噶尔县| 蒙阴县| 故城县| 海丰县| 太原市| 京山县| 平乡县| 会同县| 关岭| 蚌埠市| 来宾市| 宜兰县| 漳州市| 宁明县| 富宁县| 鹿泉市| 镇江市| 兰考县| 渝中区| 平顺县| 基隆市| 台北县| 金塔县| 永平县| 琼海市| 新郑市| 建德市| 安平县| 留坝县| 衡阳县| 桐乡市| 循化| 东至县| 博野县| 盐源县| http://444 http://444 http://444 http://444 http://444 http://444