js中parseInt()詭異行為的探究與改正
探討背景:
不知道小夥伴們有沒有發現,如果是parseInt(0.006)或者parseInt(0.0006)等返回的值都應該 0,但是parseInt(0.0000006)返回的值卻詭異的 6,這到底為什麼呢?
parseInt函數的作用
首先先說一下,parseInt()的作用是什麼?他是js原生的方法,是用來把數字字符串轉化為Number類型的數字的,還有他隻是轉化整數部分。
parse 是轉化,Int 是整型,整數,目的是把裡面轉換成整數
var num = parseInt(demo ,radix); //demo 是你要轉換的那個數
傳一個參數的用法
var demo =”123”; var num = parseInt(demo); console.log(typeof(num) + “:” + num);//number:123 var demo = true; var num = parseInt(demo); console.log(typeof(num) + “:” + num);//number: NaN var demo = false; var num = parseInt(demo); console.log(typeof(num) + “:” + num);//number: NaN var demo = 123.9; var num = parseInt(demo); console.log(typeof(num) + “:” + num);//number: 123,直接砍掉小數非四舍五入 var demo = “10”; var num = parseInt(demo ,16); console.log(typeof(num) + “:” + num); //number: 16
傳兩個參數的用法
var num = parseInt(demo ,radix); //radix 是基底的意思
解釋:radix 寫成 16,系統會認為是以 16 進制為基底, 10(一零)是 16 進制的一零,是以 16 進制為基底,把他轉成為 10 進制的數字(就是 16),上面是以目標進制為基底,轉換成十進制(radix 范圍是 2-36)
例:
//1、 parseInt(10,2)//結果是 2 因為把10看成是二進制把它轉換成10進制得2 //2 var demo = “123abc”; var num = parseInt(demo); console.log(typeof(num) + “:” + num);//結果:number: 123 //因為parseInt 從數字類開始看,看到非數字類為止,返回原來的數
探究原因
發現我們理想的是把這個小數都變成0,但是parseInt(0.0000006)卻返回6,真是離譜呀。
console.log(parseInt(0.006)) //0 console.log(parseInt(0.0006)) //0 console.log(parseInt(0.00006)) //0 console.log(parseInt(0.000006)) //0 console.log(parseInt(0.0000006)) //6
返回我就開始探索他的原因,是哪裡出現瞭問題。
parseInt(0.0000006) //0.000006 String(0.0000006); //6e-7 parseInt(6e-7); //6 parseInt(0.0000006) //6
總結原因
這下我發現原因瞭,原來是因為在10的-6次方之後,形式就換成瞭復數的形式(6e-7)。然後用parseInt()把6e-7的6,進行瞭返回,所以最後返回的值是6。
改正
如果要把小數安全的返回回來,就要用別的方法啦!
Math.floor(0.00006); //0 Math.floor(0.000006); //0 Math.floor(0.0000006); //0
這樣就可以得到你想要的值瞭。
總結
到此這篇關於js中parseInt()詭異行為的文章就介紹到這瞭,更多相關js中parseInt()內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- JavaScript高級程序設計之基本引用類型
- JavaScript parseInt0.0000005打印5原理解析
- 一篇文章讓你輕松記住js的隱式轉化
- JavaScript中類型的強制轉換與隱式轉換詳解
- JavaScript數據結構Number