和JS一起玩还注意到了这点。
为什么parseInt(1e+21)返回1而parseInt(1e+20)返回100000000000000000000?parseInt(10e+20)也返回1
为什么parseInt(1.7976931348623157E+10308);返回NaN而parseFloat(1.7976931348623157E+10308)返回Infinity
甚至创建了fibonacci序列,任何具有+21指数的值都只返回第一个数字:

parseFloat()将返回正确的号码,直到无限。
Fibonacci演示(int : parseInt():parseFloat())
(用铬测试)
发布于 2015-03-17 10:59:23
parseInt和parseFloat应该解析字符串,并将它们转换为Number字符串。因此,当您传递给它们一个Number时,解释器会强制将它们转换为字符串。因此,至少在火狐中,"" + 1e+20输出"100000000000000000000","" + 1e+21输出"1e+21"。
让我们读一下文献资料 of parseInt
如果parseInt遇到的字符不是指定基数中的数字,它将忽略该字符和所有后续字符,并返回解析到此点的整数值。
所以parseInt("1.whatever")返回1,parseInt("32.231e+something")返回32。
类似的事情必须发生在parseFloat上。
这是弱打字的错。当你做你做的事情时,正确的行为是抛出一个异常。
https://stackoverflow.com/questions/29097198
复制相似问题