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!