javascript資料型別----Number
1.浮點數值
浮點數值的坑大多集中在計算方面,例如 0.1 + 0.2 的結果不是 0.3 ,而是 0.30000000000000004 ,造成這樣結果的原因有興趣的可以去檢視一下“位運算”的相關內容。
因此,永遠不要測試每個特定的浮點數值,如果需要驗證可以通過保留小數點後幾位有效數字的方法進行比較。
toDecimal(x){ let f = parseFloat(x); if(isNaN(f)){ return false; } f = Math.round(x * 100) / 100; return f; }
對於那些極大或極小的數值,可以用 e 表示法(即科學計數法)表示的浮點數值表示。在預設情況下,ECMAScript會將那些小數點後面帶有 6 個領以上的額浮點數值轉換為以 e 表示法表示的數值。
2.與數值相關的全域性方法
(1)parseInt 方法將用於把字串轉換為整數。
字串轉為整數的時候,是一個個字元依次轉換,如果遇到不能轉為數字的字元,就不再進行下去,返回已經轉好的部分。
如:
parseInt('8a') // 8 parseInt('12**') // 12 parseInt('12.34') // 12 parseInt('15e2') // 15 parseInt('15px') // 15
如果字串的第一個字元不能轉化為數字(後面跟著數字的正負號除外),返回NaN
。
parseInt('abc') // NaN
parseInt('.3') // NaN
parseInt('') // NaN
parseInt('+') // NaN
parseInt('+1') // 1
對於那些會自動轉為科學計數法的數字,parseInt
會將科學計數法的表示方法視為字串,因此導致一些奇怪的結果。
parseInt(1000000000000000000000.5) // 1
// 等同於
parseInt('1e+21') // 1
parseInt(0.0000008) // 8
// 等同於
parseInt('8e-7') // 8
(2)進位制轉換
parseInt
parseInt
的第二個引數為10,即預設是十進位制轉十進位制。
parseInt('1000') // 1000
// 等同於
parseInt('1000', 10) // 1000
(3)parseFloat() 方法用於將一個字串轉為浮點數。
(4)isNaN
方法可以用來判斷一個值是否為NaN
。
(5)isFinite
方法返回一個布林值,表示某個值是否為正常的數值。
3.Number 數值轉換
Number ()函式的轉換規則如下
如果是 Boolean 值,true 和 false 將分別被轉換 1 和 0 。
如果是數字值,只是簡單的傳入和返回。
如果是 null 值, 返回 0 。
如果是 undefined ,返回 NaN 。
如果是字串,遵循下列規則
如果字串中只包含數字(包括前面帶正號或負號的情況),則將其轉換為十進位制數值,即“ 1 ”會變成 1,“123” 會變成 123 。而“011”會變成11
如果字串中包含有限的浮點格式,如“1.1”,則將其轉換為對應的浮點數值(同樣,也會忽略前導零)
如果字串中包含有效的十六進位制格式,例如“0xf”,則將其轉換為相同大小的十進位制整數值;
如果字串是空的(不包含任何字元),則將其轉換為 0;
如果字串中包含除上述格式之外的字元,則將其轉換為 NaN 。
如果是物件,則呼叫物件的 valueOf ()方法,然後依照前面的規則轉換返回的值。如果轉換的結果是 NaN ,則呼叫物件的toString () 方法,然後再次依照前面的規則轉換返回的字串值。