JavaScript parseInt0.0000005打印5原理解析
前言
最近,我在開發項目時遇到瞭一個奇怪的問題,parseInt (0.0000005) === 5😱。通常,輸出 0 才是正確的,但為什麼是 5?讓我們一起探討這個問題。
1.什麼時候使用parseInt?
首先,您通常什麼時候使用parseInt?大多數時候,我們使用它來解析字符串並返回它的整數部分。帶著這個問題,我們來看看parseInt方法。
2.關於parseInt的一些事情
根據 MDN文檔,“parseInt(string, radix) 函數解析字符串參數並返回指定基數(數學數字系統中的基數)的整數。”
語法
parseInt(string) parseInt(string, radix)
例子
parseInt('0.5') // 0 parseInt('0.5') // 0 parseInt('0.05') // 0 parseInt('0.005') // 0 parseInt('0.0005') // 0 parseInt('0.00005') // 0 parseInt('0.000005') // 0 parseInt('015') // 15 parseInt('015', 8) // 13 parseInt('15px', 10) // 15
3. parseInt 是如何轉換數字的?
當parseInt的第一個參數是一個數字時,它是如何解析的?
事實上在這裡: parseInt(0.0000005) === 5
3.1 第一步?將數字轉換為字符串
讓我們使用 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' 請註意這裡
3.2 第二步,做舍入操作
當我們使用 parseInt(0.0000005) 時,它實際等於 parseInt('5e-7')
parseInt 隻能將字符串的前導部分解釋為整數值;它忽略任何不能被解釋為整數表示法的一部分的代碼單元,並且沒有給出任何這樣的代碼單元被忽略的指示。
parseInt(0.0000005) parseInt('5e-7') // 5
最後,答案將返回 5,隻是因為它是唯一一個在非字符 e 之前是數字的字符,所以其餘的 e-7 將被丟棄。”
4. 如何安全獲取浮點數的整數部分?
推薦使用以下 Math.floor() 函數
Math.floor(0.5); // => 0 Math.floor(0.05); // => 0 Math.floor(0.005); // => 0 Math.floor(0.0005); // => 0 Math.floor(0.00005); // => 0 Math.floor(0.000005); // => 0 Math.floor(0.0000005); // => 0
5. 舉一反三
現在,你能解釋一下為什麼 parseInt(99999999999999999999999999) 等於 1 嗎?
以上就是JavaScript parseInt0.0000005打印5原理解析的詳細內容,更多關於JavaScript parseInt打印原理的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- js中parseInt()詭異行為的探究與改正
- JavaScript中隨機數方法 Math.random()
- JavaScript生成UUID的五種方法詳解
- 淺談JavaScript中的parseInt()的妙用
- JavaScript 中的單例內置對象Global 與 Math