parseInt 進制轉換

parseInt 進制轉換問題

今天在工作中遇到一個比較有意思的進制轉換問題,在此做下記錄,希望能幫助在利用parseInt做進制轉換時遇到類似坑的同學。

首先我們看下 w3c 手冊中對於parseInt的使用說明:

大概的意思是parseInt 共接收兩個參數,其中第一個是一個字符串,第二個參數是進制基數,返回的結果是一個十進制數字。此時我們在瀏覽器中輸入parseInt(072,8);系統返回的結果是5,你一定感到很詫異。下面我們來說明下這個結果到底是怎麼解析的。

首先,我們在使用parseInt方法的時候,第一個參數的類型應該是字符串類型,也就是說如果我的寫法是parseInt(“072”,8); 此時系統會給我返回正確的結果,即 58

問題到這裏並沒有結束,我沒有按照規定語法使用,系統並沒有報錯,並給我返回了結果5,我們一起來研究下爲什麼偏偏是5呢?

原來,在javascript 中 當我們給一個數字加了前綴0,此時該數字串會被默認以8進制進行解析,這樣的話,我們輸入的072首先就被轉義成了 58 也就是說,我明明寫的parseInt(072,8) 實際解析的時候是 parseInt(58,8); 可是問題又來了,問什麼會得到5這個一個個位數呢?

在仔細觀察parseInt(58,8) 這個運算式子之後我們發現了端倪,58的末尾數字竟然是8,這是不符合規範的啊,一個表示8進制的數字串最後位數的值明明應該是小於8的纔對,也就是說,我們這個數有錯誤了,不符合規範。這樣的話,系統便會自動只截取第一個數字進行進制轉換,也就是說,我們的式子最後變成了parseInt(5,8); 得出了結果5. 爲了驗證這個邏輯我們又試了,parseInt(12,2); 結果不出所料,返回的值爲1 。至此,真相大白。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章