为何 javascript 中 parseInt(0.0000001)==1?
阿神
阿神 2017-04-10 15:19:07
0
3
416

parseInt(0.01) == 0?

阿神
阿神

闭关修行中......

reply all(3)
Ty80

parseInt在匹配时,如果找到了以数字开头然后开始会匹配接下来的字符,直到找到不是数字的字符结束,然后输出匹配到的数字。它能识别八进制、十六进制等,但是不识别科学计数法,而parseFloat只识别十进制,还可以识别科学计数法。对于科学计数法,parseIntparseFloat会产生不同的输出:

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陷阱分析小结

阿神

精度不够,溢出取反就为正

伊谢尔伦

精简下@不写代码的码农 的答案

parseInt(0.000001) --> parseInt("1e-6") --> 1

parseInt(0.001) --> parseInt("0.001") --> 0
  1. paseInt首先调用参数的toString方法,JS中精度小于0.000001的数字会自动转化为科学计数的字符串(1e-6)。

  2. parseInt在匹配时,如果找到了以数字开头然后开始会匹配接下来的字符,直到找到不是数字的字符结束,然后输出匹配到的数字

因此就有了以上的奇怪现象。话说一个语言怎么会有这样的问题,解决掉不是很简单么。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template