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其它相關文章!

推薦閱讀: