`
安之若素
  • 浏览: 143229 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

关于js的parseInt方法自动计算错误

阅读更多
<script type="text/javascript">
	function test(){
					alert(parseInt("01")-parseInt("03"));
					alert(parseInt("02")-parseInt("03"));
					alert(parseInt("03")-parseInt("03"));
					alert(parseInt("04")-parseInt("03"));
					alert(parseInt("05")-parseInt("03"));
					alert(parseInt("06")-parseInt("03"));
					alert(parseInt("07")-parseInt("03"));
					alert(parseInt("08")-parseInt("03"));//结果为负
					alert(parseInt("09")-parseInt("03"));//结果为负
					alert(parseInt("10")-parseInt("03"));
					alert(parseInt("11")-parseInt("03"));
					alert(parseInt("12")-parseInt("03"));
	}

</script>
  </head>
  <body>

  <a href="javascript:test()">点击</a>

  </body>
</html>

  

 

   弹出结果依次为:-2  -1  0  1  2  3  4  -3  -3  7   8   9

  

查找了JS的文档后发现这个问题发生的原因是前面的"0",parseInt方法有一个可选参数来表示数字的进制,以"0"作为首字符的字符串会被JS识别为八进制数并将没有指定数字进制参数的参数值默认为8,从而以八进制来解析字符串,而"08"和"09"都不是合法的八进制数,所以被解析为0。</P>

实际上,这是个不注意细节引起的问题,显式设置进制参数的parseInt根本不会出现这个问题,parseInt("08",10)或parseInt("09",10)都能返回正确的数值。另外,parseFloat不会存在这个问题

 

分享到:
评论
1 楼 soutnila 2012-06-28  
非常好,我也发现这个问题的。只是没有像你这样写成blog。向你学习了。。

相关推荐

    【JavaScript源代码】JavaScript parseInt()与Number()区别案例详解.docx

    JavaScript parseInt()与Number()区别案例详解 ...为了避免对“0”和“0x”开头的字符串解析错误,各种javascript编程规范都规定必须要明确给出第二个参数的值,如parseInt(“123”,10). parseInt('16',

    js parseInt的陷阱分析小结

    js parseInt的陷阱分析小结,当第一个字符为0时,Js会把它看成一个8进制数字,其他8进制之外的字符都回被忽略掉。

    js中parseInt函数浅谈

    比如说parseInt(“010”,10)就是10进制的结果:10,parseInt(“010”,2)就是2进制的结果:2,parseInt(“010”,8)就是8进制的结果:8,parseInt(“010”,16)就是2进制的结果:16。 下面我来说说没有指定进制单位的...

    JS实现手写parseInt的方法示例

    本文主要给大家介绍了关于JS实现手写parseInt的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 手写parseInt的实现:要求简单一些,把字符串型的数字转化为真正的数字即可,但不能...

    关于javascript中的parseInt使用技巧

    要对表单中填写的日期格式进行客户端验证,于是在网上找了段代码,其中用到parseInt对年月日做判断,其中有类似这样的语句: …… else if(parseInt(month)&lt;1&gt;12) …… 可是对于当前本来正确的日期,这里怎么也通...

    javascript parseInt与Number函数的区别.docx

    javascript parseInt与Number函数的区别.docx

    javascript parseInt 函数分析(转).docx

    javascript parseInt 函数分析(转).docx

    js parsefloat parseint 转换函数

    js parsefloat parseint JavaScript提供了3个显式的类型转换函数,分别是eval&#40;&#41;、parseInt()和parseFloat()。 eval&#40;&#41;函数:将字符串表达式转换成数字值。例如,语句total=eval&#40;“432.1*10”&#41...

    javascript parseInt 大改造

    还隐约记得第一次遇到 parseInt这个诡异问题的时候,以为发现了IE的BUG,兴奋不已。

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

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

    javaScript parseInt字符转化为数字函数使用小结.docx

    javaScript parseInt字符转化为数字函数使用小结.docx

    js数值计算时使用parseInt进行数据类型转换(jquery)

    js获取到的数据默认都是string字符串类型的,如果进行数值的运算必须使用parseInt进行转换成数值的操作。 html代码: 代码如下: ”archive”&gt;  &lt;input type=”hidden” name=”page” value=”1″ /&gt; js...

    JS使用parseInt解析数字实现求和的方法

    本文实例讲述了JS使用parseInt解析数字实现求和的方法。分享给大家供大家参考。具体如下: 在网页上使用JavaScript函数中的parseInt解析数字,并求和,有才吧,有空了研究一下。 运行效果如下图所示: 具体代码如下...

    JavaScript的parseInt 进制问题

    今天在整理以前写过的一段根据周期值自动计算下次执行日期的js代码,发现一bug,我使用parseInt对源数据串进行转换,当输入类似:2009-05-05时,parseInt将把串的05做8进制转换,这样结果自然就不对了。

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

    其中比较常用的方法就是Number()方法和ParseInt()/ParseFloat()方法了,下面我们分别对这几种方法的转型机制进行详细地说明。具体内容详情如下所示: 【正文内容】  Number() ——————————————————...

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

    这是一个很诡异的事情,今天测试的测出来的。parseInt(1.13*100),实际返回值是112。直接看代码吧 代码如下: &lt;head&gt; [removed] function test(){ var ...//解决方法:将 此处返回改为:parseInt(yuan*1000,10)/1

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

    全局对象的parseInt() 方法&lt;/title&gt; [removed] /* parseInt() 函数可解析一个字符串,并返回一个整数。 1、解析字符串,直到不能解析为止 2、进制转化中,解析字符串,直到不能解析为止 */ [removed](parseInt...

    JavaScript的parseInt 取整使用

    Java 也有 Integer.parseInt() 方法, 但是 JavaScript 的 parseInt 处理方式与 Java 等强整型语言不太一样, 所以经常有人因为对这个方法的使用不当而获得异常返回. 下面是一段 Java 代码, 用于将字符串 020 转为整型...

Global site tag (gtag.js) - Google Analytics