Js的數字數據類型有兩種,一種是使用IEEE745格式來表示的數值型,存儲的最大範圍在2的正負53次方之間,也是我們經常使用的類型,還有一種是BigInt類型,用來存儲任意類型的數字,但是用的地方不多,我們主要學習第一種常用數字類型。
一、字面量格式的表示方法
1、十進位:十進位整數可以直接像數學中一樣書寫,也是我們日常開發中最常用的一種進位,例如:let num = 10;
2、八進位:ECMAJavascript規定,八進位字面值的第一位必須是0,如果我們書寫的數值超出了八進位的範圍,那麼0將會被瀏覽器忽略,後面的數值將會被當作十進位來解析(八進位的範圍是0-7)。需要注意的是,在嚴格模式下,八進位如果超出書寫的範圍會報錯。例如:
嚴格模式下報錯:
3、十六進位
十六進位的前兩位必須是0x,後面跟著的是十六進位數字(0-9以及A-F,字母可以是大寫也可以是小寫);例如:
說明:(1)、在進行算術計算時,我們書寫的八進位和十六進位都會轉換為十進位。
(2)、我們在書寫十進位的時候,ke可能有時候會遇到有很多0的情況,數0數的眼花不說,還容易亂,在js中提供了一種簡單的寫法,用e表示,例如:9.7e7表示的是9.7乘以10的7次冪,如果是-7的話就是10的-7次冪。是不是感覺簡單多了。
(3)、十六進位的使用一般是表示顏色值,例如:0xFF;
二、浮點數值
浮點數值,書寫的數值中必須包含小數點而且小數點後面必須有一位,但是需要注意的是,保存浮點數的值需要的內存空間是整數的2倍,因此ECMAJavascript是不會放過任何一個可以將浮點型轉換為整型的機會,如果你的項目中規定必須使用小數,就要注意一下。
說明:1、不要使用js做比較精確的數值運算,那樣你會瘋掉的,不相信你可以試試使用js計算一下0.1+0.2的值,絕對不是0.3,這是由於數字的存儲序列的問題,
有個解決的辦法就是使用toFixed( n )對結果進行取捨。
2、js常用的取捨內置函數;
(1)、Math.toFixed(n);向下取捨,n值代表的是小數的位數,返回值是一個字符串,如果返回的小數位不足,用0補齊。例如:1.1變成1,-1.1變成-2;
(2)、Math.ceil(n);向上取捨,例如:1.1變成2,-1.1變成-1;
(3)、Math.round(n);四捨五入,
三、NAN
NAN即非數,是js數值型裡面的一個特殊值,經常用來表示一個原設定要返回數值的操作未返回數值,這也體現了js的靈活性,這樣做就不會報錯,不會阻止後續程序的執行。
說明:(1)、凡是涉及到NAN的計算最終的結果都是NAN,NAN最狠的是連自己也不認識,即NAN不等於任何值,包括其自身。
(2)、鑑於以上情況,js用isNAN( )來判斷我們輸入的值是不是NAN,返回的結果是一個布爾值。
四、兩個內置的轉換函數
1、轉換為整型parseInt( );
處理整數時常用的轉換函數;會忽略字符串前面的空格,直至找到第一個非空格字符,
轉換規則:
a、如果第一個非空格字符不是數字或者負號,就會返回NAN;與number不同的是,需要注意的是number會將空字符串轉換成0,但是parseInt()會轉換為NAN;
b、如果第一個字符是數字,會繼續解析第二個字符,直到遇到非數字字符停止,然後將前面讀取到的數值返回,例如parseInt("123456abc"),轉換的結果為123456,由於parseInt()是整型函數,會忽略小數點以後的數字字符,例如:parseInt(123.5),結果是123;
c:特別需要注意的是在parseInt()轉換中,如果字符串是以ox開頭且後面跟著數字字符,會被當作十六進位數來處理,字符串以0開頭會被當作八進位處理;例如:parseInt("oxf"),結果是15;(如果不會進位轉換,建議先去百度學習一下)!
d、在js老版本中,會發生進位混亂的情況,為了解決這一問題,可以為parseInt()提供第二個參數,例如parseInt("oxf",16)明確指出為16進位,避免了錯誤的解析;建議在書寫時指定進位,以免出現解析失敗的情形。
2、轉換為浮點型parseFloat( );
a、特別注意一點:parseFloat()只能轉換十進位數值,永遠沒有第二個參數的寫法,如果書寫了八進位或者十六進位,八進位被當作十進位處理,十六進位會被轉換成0;例如parseFloat(「oxf」)轉換的結果是0;
b、parseFloat()只識別第一個小數點,第二個小數點是無效的;例如:parseFloat(「123.5.6」),轉換的結果是123.5;
c、parseFloat()也可以採用科學計數法的方式書寫,書寫方法為parseFloat(「3.125e7」),轉換的結果是31250000;e代表科學計數法當中的10;
3、轉換為數值型Number( );
程序會從左到右去挨個讀取number裡面的值,直到遇到一個非數字類型的值停止;
Number轉換規則:
a、如果第一個數字是0,程序會直接忽略數字0,直接讀取下一個數字;例如:number(0123),其結果是123;
b、如果第一個是非數,直接返回NAN,例如:number(a122);結果是NAN;當一個數字是0,第二個數字是非數時,返回的結果也是NAN;如果以數字開頭,但是包含字母、下劃線等,會直接返回NAN.例如:number("1123abc")結果是NAN;但是小數點會當作浮點類型處理,不會停止程序運行,例如:number(123.05),結果是123.05;
c、如果是空字符串則返回0;例:Number("");結果為0;引號之間添加空格或者書寫數字0其結果相同;
d、如果轉換的是布爾值,true和false將分別被轉換為1和0;
e、如果是null,返回0;如果是undefined,返回NAN;
f、如果字符串中包含有效的十六進位格式,例如number(「oxf」);會先將其轉換為大小相同的十進位整數值;其中ox是十六進位的標識符,轉換結果為15;
好了,今天的內容基本上完了,今天的任務是完成以下測試(圖片來自騰訊課堂渡一教育):