一個驚人的問題,parseInt(0.0000005) 返回結果是“5”?

語言: CN / TW / HK

我正在參加「掘金·啟航計劃」

企業微信截圖_20221011144220.png

前言

作為前端開發工程師,JavaScript是我們主要的開發語言,是每個人必須要掌握的,它是弱型別語言,本身語法也比較簡單,最近我偶然間發現了一個奇怪的問題,parseInt(0.0000005)輸出的結果是:5,通常應該輸出0才是對的呀。 下面分享了這個比較有意思的問題,希望對大家有所幫助同時歡迎討論指出問題!

1.parseInt(0.0000005)

parseInt(0.0000005) // 5 此處考的知識點是:parseInt(string,redix)方法

parseInt(string,redix)方法: 解析一個數字字串解析為整數的函式,

其中string:要被解析的值;radix是 2-36 之間的整數,表示被解析字串的基數。redix不是必填

注意:10不是預設值,最常見的值是2,8,10,16

示例: parseInt(0.05); // 沒有指定或者0,會根據字串的值進行推算 parseInt('100', 2); // 指定2,表示將"100"以二進位制方式解析字串 parseInt(0.05,16); // 指定16,表示將“0.05”看作是十六進位制方式來解析,超出這個範圍將返回NAN

2 parseInt()轉化數字步驟

1.第一步:redix沒有指定,將會使用string()方法將數字轉化為字串

示例如下:

string(0.5) // '0.5' string(0.05) // '0.05' string(0.005) // '0.005' string(0.0005) // '0.0005' string(0.00005) // '0.00005' string(0.000005) // '0.000005' string(0.0000005) // '5e-7' 重點注意這裡表示方式是用指數的形式 string小於10負6次方的浮點數將以指數表示

2.第二步:做舍入操作提取整數

parseInt(string,redix)方法只能將字串的前導部分解釋為整數,它忽略任何不能被解釋為整數表示法的一部分程式碼,並且沒有給出任何這樣的程式碼單元被忽略的指示。

parseInt() 用於字串和非空陣列,會取出其中整數部分 ( 陣列的話是取第 1 個元素來處理 ) ,返回一個新的整數。 ``` parseInt(0.0000005) 等於 parseInt("5e-7") parseInt("5e-7") // 5 parseInt("0.00005") //5 parseInt("0.0005") //5 parseInt("0.005") //5 parseInt("0.05") //5

parseInt(['11.45','22']) //11 parseInt(['aa11.1','22.2']) //NAN

``` 解釋:5e-7:5是唯一一個在非字元 e 之前是數字的字元,所以其餘的 e-7 將被丟棄; 0.005: 是浮點數,只會提取浮點數的整數部分

3 總結

使用parseInt()方法提取浮點數的整數部分時要小心了,小於10負6次方的浮點數將會以指數表示,因此可以用Math.floor()函式來提取浮點數。