標籤:技術 ber 其他 字元 十六進位 情況下 進位 根據 科學
數值中的坑:
1、JavaScript內部,所有數字都是以64位浮點數形式儲存,即使整數也是如此。所以1與1.0是相同的同一個數,在JavaScript語言底層中根本沒有整數。但在位元運算時JavaScript自動將64位浮點數轉換為32位整數後再運算。
2、浮點數不是精確的值,所以涉及小數的比較時要特別小心。尤其和 0.3 相關的如。0.1 + 0.2 = 0.30000000000000004而不是0.3,所以0.1 + 0.2 ===0.3 返回false。
3、數值精度:國際標準IEEE754,JavaScript浮點數的64個二進位位,從最左邊開始是這樣組成的--->第一位:符號位,0為正數,1為負數;第2位到第12位(共11位):指數部分;第13位到第64位(共52位):小數部分(有效數字)。符號位決定了一個數的正負,指數部分決定了數值的大小,小數部分決定了數值的精度。
指數部分一共有11個二進位位,因此大小範圍就是0到2047。IEEE 754 規定,如果指數部分的值在0到2047之間(不含兩個端點),那麼有效數位第一位預設總是1,不儲存在64位浮點數之中。也就是說,有效數字這時總是1.xx...xx
的形式,其中xx..xx
的部分儲存在64位浮點數之中,最長可能為52位。因此,JavaScript 提供的有效數字最長為53個二進位位。
精度最多隻能到53個二進位位,這意味著,絕對值小於等於2的53次方的整數,即-253到253,都可以精確表示。大於2的53次方的數值,都無法保持精度(無論是運算還是儲存)。由於2的53次方是一個16位的十進位數值,所以簡單的法則就是,JavaScript 對15位的十進位數都可以精確處理。
4、數值範圍:根據標準,64位浮點數的指數部分的長度是11個二進位位,意味著指數部分的最大值是2047(2的11次方減1)。也就是說,64位浮點數的指數部分的值最大為2047,分出一半表示負數,則 JavaScript 能夠表示的數值範圍為21024到2-1023(開區間),超出這個範圍的數無法表示。
如果一個數大於等於2的1024次方,那麼就會發生“正向溢出”,即 JavaScript 無法表示這麼大的數,這時就會返回Infinity
。
如果一個數小於等於2的-1075次方(指數部分最小值-1023,再加上小數部分的52位),那麼就會發生為“負向溢出”,即 JavaScript 無法表示這麼小的數,這時會直接返回0。
5、科學記號標記法:以下兩種情況,JavaScript 會自動將數值轉為科學計數法表示,其他情況都採用字面形式直接表示。(1)小數點前的數字多於21位。(2)小數點後的零多於5個。
特殊數值:
1、0:JavaScript分 +0、-0、0三種,但是本身大小相等。幾乎所有場合整零和負零都當作正常0,唯一區別的場合是 +0、-0做分母。除以正零得到+Infinity
,除以負零得到-Infinity。但是0/0得NaN。NaN
與任何數(包括它自己)的運算,得到的都是NaN。
2、NaN:表示Not a Number,"非數字"。主要出現在將字串解析成數字出錯的場合。NaN資料類型屬於Number。NaN
不等於任何值,包括它本身。
3、Infinite:無窮,有正負之分。
Number的屬性:
Number的方法:
- parseInt() ---1、將字串轉換成整數,parseInt
的傳回值只有兩種可能,要麼是一個十進位整數,要麼是NaN
。對於那些會自動轉為科學計數法的數字,parseInt
會將科學計數法的表示方法視為字串,因此導致一些奇怪的結果。如果字串以0x
或0X
開頭,parseInt
會將其按照十六進位數解析。如果字串以0
開頭,將其按照10進位解析。
2、進位轉換(其他進位轉成十進位):parseInt
方法還可以接受第二個參數(2到36之間),表示被解析的值的進位,返回該值對應的十進位數。預設情況下,parseInt
的第二個參數為10,即預設是十進位轉十進位。如果第二個參數是0
、undefined
和null
,則直接忽略。先進行第一步計算轉換為數字,在進行第二步按進位計算。
- parseFloat() --- parseFloat
方法用於將一個字串轉為浮點數。如果字串符合科學計數法,則會進行相應的轉換,變成小數。
- isNaN() --- 判斷一個值是否為NaN
。
-isFinite() --- 表示某個值是否為正常的數值。
JavaScript基礎——數值與數學