原帖地址:http://lifesinger.org/blog/2010/05/the-trap-of-parseint/
看代码:
alert(parseInt(0.000001)); alert(parseInt(0.0000001));
第一条语句输出 0, 第二条语句输出 1, 囧。
继续看代码:
alert(parseInt('0.000001')); alert(parseInt('0.0000001'));
都输出 0, 这才符合预期。
查看 ECMA-262 规范,parseInt 会先调用 toString 方法。问题已逐渐清晰:
alert(0.000001); alert(0.0000001);
第一条语句原样输出,第二条语句输出 1e-7.
继续翻查 ECMA-262 9.8.1 ToString Applied to the Number Type 一节,恍然大悟:
assertEquals("0.00001", (0.00001).toString()); assertEquals("0.000001", (0.000001).toString()); assertEquals("1e-7", (0.0000001).toString()); assertEquals("1.2e-7", (0.00000012).toString()); assertEquals("1.23e-7", (0.000000123).toString()); assertEquals("1e-8", (0.00000001).toString()); assertEquals("1.2e-8", (0.000000012).toString());
上面是 V8 引擎 number-tostring 的单元测试脚本 , 很好地诠释了 ECMA 规范。
小结:对于小于 1e-6 的数值来说,ToString 时会自动转换为科学计数法。 因此 parseInt 方法,在参数类型不确定时,最好封装一层:
function parseInt2(a) { if(typeof a === 'number') { return Math.floor(a); } return parseInt(a); }
相关推荐
js parseInt的陷阱分析小结,当第一个字符为0时,Js会把它看成一个8进制数字,其他8进制之外的字符都回被忽略掉。
JavaScript parseInt()与Number()区别案例详解 学习目标: parseInt()、Number()这两个函数用到最多的地方就是把一个字符串转换成数据类型,那么他们都有哪些区别? 学习内容: parseInt()函数将给定的字符串...
比如说parseInt(“010”,10)就是10进制的结果:10,parseInt(“010”,2)就是2进制的结果:2,parseInt(“010”,8)就是8进制的结果:8,parseInt(“010”,16)就是2进制的结果:16。 下面我来说说没有指定进制单位的...
javaScript parseInt字符转化为数字函数使用小结.docx
NULL 博文链接:https://soulshard.iteye.com/blog/346029
今天测的时候发现问题了,当数据库中月份为09的时候就出问题了,用parseInt转换之后就成0了。好不解。测了好久,没有发现我代码中的问题,到google搜了一下,才知道是这么一回事。 对于parseInt(“01”)到parseInt...
我们经常用ParseInt函数转换字符串为int数值,ParseInt函数有两个参数可以设置,其中第二个参数可以缺省。 ParseInt(“字符串”,使用的进制) var num1=ParseInt(“10”,2)//2 var num1=ParseInt(“10”,8)//8 var ...
将数据类型转换为数字类型Number()、parseInt()、parseFloat的区别
js parsefloat parseint JavaScript提供了3个显式的类型转换函数,分别是eval()、parseInt()和parseFloat()。 eval()函数:将字符串表达式转换成数字值。例如,语句total=eval(“432.1*10”)...
Map 和 parseInt 问题.md
数字.js 更严格的parseInt和parseFloat 。用法 numero . parseInt ( 42 ) ; // 42numero . parseInt ( '42' ) ; // 42numero . parseInt ( '42 ' ) ; // 42numero . parseInt ( 3.14 ) ; // nullnumero . parseInt ...
本文主要给大家介绍了关于JS实现手写parseInt的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 手写parseInt的实现:要求简单一些,把字符串型的数字转化为真正的数字即可,但不能...
本文实例讲述了golang中strconv.ParseInt函数用法。分享给大家供大家参考,具体如下: golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大. 参数1 数字的字符串形式 参数2 数字字符串的进制 比如二...
要对表单中填写的日期格式进行客户端验证,于是在网上找了段代码,其中用到parseInt对年月日做判断,其中有类似这样的语句: …… else if(parseInt(month)<1>12) …… 可是对于当前本来正确的日期,这里怎么也通...
parseInt(1.13*100),实际返回值是112。直接看代码吧 代码如下: <head> [removed] function test(){ var thisvalue = 0; thisvalue=yuanToFen($(“#inp”).val()); alert(thisvalue); } /*元转分*/ ...
1、解析字符串,直到不能解析为止 2、进制转化中,解析字符串,直到不能解析为止 */ [removed](parseInt(“123”) + “ ”);//123 [removed](parseInt(“1abc23”) + “ ”);//1 [removed](parseInt(“123abc...
本文实例讲述了JS中parseInt()和map()用法。分享给大家供大家参考,具体如下: parseInt()的几个例子 var b = parseInt("01"); alert("b="+b); var c = parseInt("09/08/2009"); alert("c="+c); ...