【问题标题】:parseInt() scientific notationparseInt() 科学记数法
【发布时间】:2015-03-17 10:51:16
【问题描述】:

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

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

为什么parseInt(1.7976931348623157E+10308); 返回NaNparseFloat(1.7976931348623157E+10308) 返回Infinity


即使做了一个斐波那契数列,任何具有+21 指数的值也只返回第一个数字:

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

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

(在 Chrome 中测试)

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    让我们阅读the documentationparseInt

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

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

    parseFloat 一定会发生类似的事情。

    这是弱类型的错。 IMO 在做你所做的事情时正确的行为是抛出异常。

    【讨论】:

    • 为什么 parseInt(1e+20) 返回 100000000000000000000 而不是 1?
    • 我已经说过了。当1e+20 被强制转换为字符串时,它会输出"100000000000000000000",它会被解析为正确的数字。 1e+21 改为输出 "1e+21"。试试我在答案中写的 "" + 个总和。
    • 我做到了。 parseInt(""+1e+21) 输出 1
    • 不,我的意思是运行 "" + 1e+21,没有 parseInt。与 1e+20 相同
    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-10
    相关资源
    最近更新 更多