PHP中文网2017-04-10 15:21:07
parseInt
在匹配时,如果找到了以数字开头然后开始会匹配接下来的字符,直到找到不是数字的字符结束,然后输出匹配到的数字。它能识别八进制、十六进制等,但是不识别科学计数法,而parseFloat
只识别十进制,还可以识别科学计数法。对于科学计数法,parseInt
和parseFloat
会产生不同的输出:
parseInt(0.0000001)-->1
(因为0.0000001被转换成字符串时变成"1e-7",所以变成parseInt("1e-7"))
parseInt("1e6")-->1
parseFloat(0.0000001)-->0.0000001
(0.0000001转换成字符串变为"1e-7",所以变为parseFloat("1e-7")-->0.0000001,不要试图alert那样你只会看到"1e-7")
parseFloat("1e6")-->1000000
对于小于 1e-6 的数值来说,toString 时会自动转换为科学计数法。
js parseInt之0.0000001陷阱分析小结
伊谢尔伦2017-04-10 15:21:07
精简下@不写代码的码农 的答案
parseInt(0.000001) --> parseInt("1e-6") --> 1
parseInt(0.001) --> parseInt("0.001") --> 0
paseInt首先调用参数的toString方法,JS中精度小于0.000001的数字会自动转化为科学计数的字符串(1e-6)。
parseInt在匹配时,如果找到了以数字开头然后开始会匹配接下来的字符,直到找到不是数字的字符结束,然后输出匹配到的数字
因此就有了以上的奇怪现象。话说一个语言怎么会有这样的问题,解决掉不是很简单么。