parseInt的精度丟失問題

作為前端開發(fā)工程師,JavaScript是我們主要的開發(fā)語言,是每個人必須要掌握的,它是弱類型語言,本身語法也比較簡單,最近我發(fā)現了一個奇怪的問題,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")  //0
parseInt("0.0005")   //0
parseInt("0.005")    //0
parseInt("0.05")     //0
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()函數來提取浮點數。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容