TypeScript類(lèi)型之Number,(小數(shù)圓整)
TypeScript類(lèi)型之Number,(小數(shù)圓整)
TypeScript類(lèi)型之Number,(小數(shù)圓整)
TS的類(lèi)型中Boolean屬于是最簡(jiǎn)單,所以就不打算寫(xiě)了。
首先,我們要了解幾個(gè)概念:
(1)在JS/TS中0.1+0.1!=0.2,
(2)js中的Number如何編碼
(3)上溢和下溢
(4)Number.Epsion (圓整閾值)
在JS中Number是用IEEE 753標(biāo)準(zhǔn),用binary64編碼將數(shù)字便是為64位浮點(diǎn)數(shù)【64bit】
同時(shí)還定義了一些特殊的值:NaN,正無(wú)窮,負(fù)無(wú)窮,

那么為什么0.1==0.000000005555呢?因?yàn)閖s在比較的時(shí)候會(huì)進(jìn)行小數(shù)的圓整。
上溢和下溢:

在js中如果數(shù)值超過(guò)了binary64的最大值或者最小值,就會(huì)直接歸零
要注意了,在js中整數(shù)和小數(shù)用的是同一套的編碼。
但是小數(shù)相加出現(xiàn)的是表示問(wèn)題(圓整)
整數(shù)相加出現(xiàn)的是上下溢出
首先,從簡(jiǎn)至繁,從易到難。
整數(shù):
Number.isSafeInteger()
?方法用來(lái)判斷傳入的參數(shù)值是否是一個(gè)“安全整數(shù)”(safe integer)。
BigInt類(lèi)型,可以表示無(wú)限大整數(shù)的類(lèi)型
小數(shù):
關(guān)于圓整的再次說(shuō)明:
高中的時(shí)候,我們一定做過(guò)一道題:1/2+1/4+1/8++++++++1/(2^n),n +∞
這道數(shù)學(xué)題的答案是1,但是大家都知道它根本不是一,而是一個(gè)無(wú)限接近1的結(jié)果。
這就和上面小數(shù)的表示誤差差不多,你實(shí)際上無(wú)法完美表示0.25--0.5之間的0.4,你只能無(wú)限接近。
為此,JS給了一個(gè)Number.EPSION



2023-8-24? ?惠晴_GD