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()内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解js中Number()、parseInt()和parseFloat()的区别

    一:Number() 如果是Boolean值,true和false值将分别被转换为1和0. 如果是数字值,只是简单的传入和返回. 如果是null值,返回0. 如果是undefined,返回NaN. 如果是字符串: a.  如果字符串中只包含数字时,将其转换为十进制数值,忽略前导0 b. 如果字符串中包含有效浮点格式,如"1.1",将其转换为对应的浮点数字,忽略前导0 c. 如果字符串中包含有效的十六进制格式,如"0xf",将其转换为相同大小的十进制数值 d. 如果字

  • 深入理解JS中Number(),parseInt(),parseFloat()三者比较

    参考阅读: 详解js中Number().parseInt()和parseFloat()的区别 详解JS转换数值函数Number().parseInt().parseFloat() 在项目开发中我们经常会用到转型方法,尤其是JS这种松散型的语言.其中比较常用的方法就是Number()方法和ParseInt()/ParseFloat()方法了,下面我们分别对这几种方法的转型机制进行详细地说明.具体内容详情如下所示: [正文内容] Number() --------------------------

  • JS中parseInt()和map()用法分析

    本文实例讲述了JS中parseInt()和map()用法.分享给大家供大家参考,具体如下: parseInt()的几个例子 var b = parseInt("01"); alert("b="+b); var c = parseInt("09/08/2009"); alert("c="+c); 结果:b=1,c=0 parseInt()用来解析字符串,返回整数,有几个特点: 1.无视被解析字符串最前和最后的空格,即:"

  • javascript中parseInt()函数的定义和用法分析

    本文实例讲述了javascript中parseInt()函数的定义和用法.分享给大家供大家参考.具体分析如下: 此函数可以解析一个字符串,并返回一个整数. 语法结构: 复制代码 代码如下: parseInt(string, type) 参数列表: 参数 描述 string 必需.要被解析的字符串. type 可选.表示要解析的数字的基数,通俗的说就是数字的进制,比如二进制.八进制或者十六进制.该值介于2 ~ 36之间. 详细说明: 一.指定type参数: 指定type参数后,函数就会按照指定的t

  • javascript中全局对象的parseInt()方法使用介绍

    复制代码 代码如下: <html> <head> <title>全局对象的parseInt() 方法</title> <script> /* parseInt() 函数可解析一个字符串,并返回一个整数. 1.解析字符串,直到不能解析为止 2.进制转化中,解析字符串,直到不能解析为止 */ document.write(parseInt("123") + "<br/>");//123 docume

  • javascript parseInt() 函数的进制转换注意细节

    parseInt(string, radix) 有2个参数,第一个string 是传入的数值,第二个radix是 传入数值的进制,参数radix 可以忽略,默认为 10,各种进制的数转换为 十进制整数(如果不是整数,向下取整). radix 的取值范围是 2~36,如果 radix 为 1 或 radix>36 ,转换结果将是 NaN ,如果 radix 为 0 或其它值将被忽略,radix 默认为 10 . 该函数要求第一个参数是字符串,如果不是字符串将被转换成字符串,而且,在进行转换之前,字

  • 详解JS转换数值函数Number()、parseInt()、parseFloat()

    JS中有三种函数可以将非数值转换成数值:Number().parseInt()和parseFloat().第一个函数,即转型函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值.这3个函数对于同样的输入会返回不同的结果. Number() Number()函数的转换规则如下: •如果参数是Date对象,返回从1970年1月1日至今的毫秒数. •如果是Boolean值,true和false将分别被替换为1和0 •如果是数字值,只是简单的传入和返回 •如果是null值

  • 浅谈JavaScript中的parseInt()的妙用

    起因 写这篇博客的起因是今天在刷leetcode的每日一题,是一道字符串转换整数 (atoi)的题,感兴趣的话可以点击题目名称去看一下具体描述.在我多次debug终于成功提交之后,去评论区看了一下大佬们的解题思路,看完之后不禁感叹javascript中原来parseInt( )已经这么优秀了啊.这告诉我了一个道理,我们自认为再熟悉不过的api,可能我们并没有真正意义上的掌握." 我的解答 /** * @param {string} str * @return {number} */ var my

  • Javascript 函数parseInt()转换时出现bug问题

    这是一个很诡异的事情,今天测试的测出来的.parseInt(1.13*100),实际返回值是112.直接看代码吧 复制代码 代码如下: <head> <script type="text/javascript"> function test(){ var thisvalue = 0; thisvalue=yuanToFen($("#inp").val()); alert(thisvalue); } /*元转分*/ function yuanT

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

    探讨背景: 不知道小伙伴们有没有发现,如果是parseInt(0.006)或者parseInt(0.0006)等返回的值都应该 0,但是parseInt(0.0000006)返回的值却诡异的 6,这到底为什么呢? parseInt函数的作用 首先先说一下,parseInt()的作用是什么?他是js原生的方法,是用来把数字字符串转化为Number类型的数字的,还有他只是转化整数部分. parse 是转化,Int 是整型,整数,目的是把里面转换成整数 var num = parseInt(demo

  • Js中parseInt的使用及注意事项

    目录 start 回顾一下map 学习一下 parseInt 总结: 总结 start 先看一个题目['1','2','3'].map(parseInt) 乍一看,我写下答案:[1,2,3] 控制台运行:['1',NaN,NaN] 为什么?map函数我很熟悉了,那么问题出在哪里?大概率出在 parseInt上了 回顾一下map map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成.总共就两个参数,一个是回调函数,一个是指定对应的this. 1.第一个参

  • js中parseInt函数浅谈

    从很热门的实例parseInt("09")==0说起.parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制.比如说parseInt("010",10)就是10进制的结果:10,parseInt("010",2)就是2进制的结果:2,parseInt("010",8)就是8进制的结果:8,parseInt("010",16)就是2进制的结果:16. 下面我来说

  • 关于JavaScript中parseInt()的一个怪异行为解决

    目录 1. parseInt() 中的一个怪异行为 2.解决 parseInt() 该怪异行为 3. 总结 parseInt() 是一个内置的 JavaScript 函数,它可以将数字字符串解析为整数.比如,我们将数字字符串 '100' 解析为整数: const number = parseInt('100'); number; // 100 如预期那样,'100' 被解析为整数 100. parseInt(numericalString, radix) 也接受第二个参数:radix(基数),另

  • JS中toFixed()方法四舍五入的精度问题详解

    目录 踩的坑 填坑方法 什么样的坑? 总结 踩的坑 最近工作中,在计算一个商品的折扣价格,有时候总是出现价格会有一分钱的差异,涉及钱的问题都是比较敏感的,经过排查,最后发现竟然是 JS 原生的 toFixed 方法的问题. 好家伙,这都啥规律啊...(⊙o⊙) 填坑方法 先不着急去探究其中的问题,既然发现了问题,那就先把 Bug 修复了先,原生方法用不了,就自己写一个呗,还不是分分钟的事情,哈哈哈! /** * 保留小数点几位数, 自动补零, 四舍五入 * @param num: 数值 * @p

  • Java实现JS中的escape和UNescape代码分享

    众所周知,JavaScript中escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串.下面,我们就来看看 Java语言中类似JavaScript中的escape() 和unescape() 转码方法,具体代码如下: public class EscapeUnescape { public static String escape(String src) { int i; char j; StringBuffer tmp = new StringBuffer(); tm

  • js中prototype用法详细介绍

    prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,而且特殊的地方便在于:它是一个给类的对象添加方法的方法!这一点可能听起来会有点乱,别急,下面我便通过实例对这一特殊的方法作已下讲解: 首先,我们要先了解一下类的概念,JavaScript 本身是一种面向对象的语言,它所涉及的元素根据其属性的不同都依附于某一个特定的类.我们所常见的类包括:数组变量(Array).逻辑变量(Boolean).日期变量(Date).结构变量(Function).数值变量(Number)

  • JS中的this变量的使用介绍

    JavaScript中this的使用 在JavaScript中this变量是一个令人难以摸清的关键字,this可谓是非常强大,充分了解this的相关知识有助于我们在编写面向对象的JavaScript程序时能够游刃有余. 对于this变量最要的是能够理清this所引用的对象到底是哪一个,也许很多资料上都有自己的解释,但有些概念讲的偏繁杂.而我的理解是:首先分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象. 示例一. 复制代码 代码如下: var obj = {};

随机推荐