[JavaScript] parseInt 的秘密 – 為什麼 0.0000008 取整數不是 0 ?

carbon 3 [JavaScript] parseInt 的秘密 - 為什麼 0.0000008 取整數不是 0 ?
0.0000008 取整數為 8 而不是 0 ↑

parseInt

parseInt(string, radix);

parseInt 的功用為取字串整數,若傳入的值非字串,則會先將之轉為字串再取整數

那麼產生「突變」的原因就是因為我們傳入的浮點數並非字串,所以它會需要先轉換成字串再取整數,而轉換成字串的過程中出現了不符合我們所預想的情況。

將浮點數轉為字串

我們用 toString() 來看看轉為字串的過程中發生了什麼事。將 0.0008 以及突變的 0.0000008 加上 toString 輸出:

carbon 4 [JavaScript] parseInt 的秘密 - 為什麼 0.0000008 取整數不是 0 ?

看出來差異了嗎?

原來到小數點第七位數時,會以指數的型態來表現,因此 parseInt(0.0000008); 得到的結果會為 8 而不是我們預想的 0

carbon 5 [JavaScript] parseInt 的秘密 - 為什麼 0.0000008 取整數不是 0 ?

解決辦法

如果你只是想取浮點數的整數部分,千萬不要使用 parseInt (除非你能保證你的數字不會小於小數點第七位),不然建議使用 Math.floor

Math.floor 會回傳小於等於所給數字的最大整數

carbon 6 [JavaScript] parseInt 的秘密 - 為什麼 0.0000008 取整數不是 0 ?
0 0 評分數
Article Rating
訂閱
通知
guest

0 Comments
在線反饋
查看所有評論