parseInt()科学记数法

时间:2015-03-17 10:51:16

标签: javascript

正在玩JS并注意到这一点。

为什么parseInt(1e+21)返回1parseInt(1e+20)返回100000000000000000000parseInt(10e+20)还会返回1吗?

为什么parseInt(1.7976931348623157E+10308);会在NaN返回parseFloat(1.7976931348623157E+10308)时返回Infinity


甚至制作了一个斐波那契序列,任何具有+21指数的值只返回第一个数字:

fibonacci sequence scientific notation

parseFloat()将返回正确的数字,直到无限。

Fibonacci demo (int : parseInt() : parseFloat())

(在Chrome中测试)

1 个答案:

答案 0 :(得分:3)

parseIntparseFloat应该解析字符串并将其转换为Number s。因此,当您向它们传递Number时,它会被解释器强制转换为字符串。因此,至少在Firefox中,"" + 1e+20输出"100000000000000000000""" + 1e+21输出"1e+21"

让我们阅读parseInt的{​​{3}}:

  

如果parseInt遇到的字符不是指定基数中的数字,它会忽略它和所有后续字符并返回解析到该点的整数值

所以parseInt("1.whatever")返回1parseInt("32.231e+something")返回32。

parseFloat必须发生类似的事情。

弱打字的错误。 IMO在做你做的事情时的正确行为就是抛出异常。