js中parseInt()诡异行为的探究与改正

 更新时间:2021年04月27日 10:33:38   作者:Famigilstimo  
这篇文章主要给大家介绍了关于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()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解JavaScript表单验证(E-mail 验证)

    详解JavaScript表单验证(E-mail 验证)

    这篇文章主要为大家详细介绍了JavaScript表单验证,重点介绍了E-mail验证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • 一文详解e2e测试之cypress的使用

    一文详解e2e测试之cypress的使用

    这篇文章主要介绍了e2e测试之cypress的使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • js实现类选择器和name属性选择器的示例步骤

    js实现类选择器和name属性选择器的示例步骤

    这篇文章主要介绍了js实现类选择器和name属性选择器的示例步骤,帮助大家更好的理解和使用js,感兴趣的朋友可以了解下
    2021-02-02
  • uniapp组件uni-popup弹出层的使用

    uniapp组件uni-popup弹出层的使用

    弹出层组件用于弹出一个覆盖到页面上的内容,本文主要介绍了uniapp组件uni-popup弹出层的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • js实现简单选项卡制作

    js实现简单选项卡制作

    这篇文章主要为大家详细介绍了js实现简单选项卡制作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • JS鼠标滑过图片时切换图片实现思路

    JS鼠标滑过图片时切换图片实现思路

    在浏览网页时会看到这样的效果:当鼠标滑过一张图片后,这张图片切换为了另外的一张图片,下面为大家介绍下具体是如何实现的,感兴趣的朋友不要错过
    2013-09-09
  • 跟我学习javascript的异步脚本加载

    跟我学习javascript的异步脚本加载

    跟我学习javascript的异步脚本加载,告诉大家如何使自己的站点更快捷,以及最简单的方法 利用什么样的工具达到预期效果,想一探究竟的朋友可以参考一下这篇文章。
    2015-11-11
  • js实现点击图片自动提交action的简单方法

    js实现点击图片自动提交action的简单方法

    下面小编就为大家带来一篇js实现点击图片自动提交action的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • JS或jQuery获取ASP.NET服务器控件ID的方法

    JS或jQuery获取ASP.NET服务器控件ID的方法

    这篇文章主要介绍了JS或jQuery获取ASP.NET服务器控件ID的方法,本文介绍一方法,解决如何使用js获取ASP.NET控件在浏览器端生成html标签对应的id,需要的朋友可以参考下
    2015-06-06
  • Bootstrapvalidator校验、校验清除重置的实现代码(推荐)

    Bootstrapvalidator校验、校验清除重置的实现代码(推荐)

    这篇文章给大家介绍了bootstrapvalidator校验、校验清除重置的实现代码,在代码中需要我们引入css与js文件,大家可以参考下文的代码
    2016-09-09

最新评论