【问题标题】:How does parseFloat() work when the string contains non-numeric characters?当字符串包含非数字字符时,parseFloat() 如何工作?
【发布时间】:2018-10-10 20:54:03
【问题描述】:

我在执行 parseFloat() 时遇到问题 - 我不明白为什么它会产生以下输出:

document.write(parseFloat("6e2") + "<br />"); //output is 600 why?
document.write(parseFloat("6b2") + "<br />"); //output is 6 why?
document.write(parseFloat("6c2") + "<br />"); //output is 6 why?

您能告诉我脚本是如何工作的吗?

【问题讨论】:

    标签: javascript dom


    【解决方案1】:

    6e2 产生 600,因为它将您的输入视为科学记数法。

    6e2 == 6 x 102 == 600

    另外两个产生 6,因为 parseFloat 解析 6,然后输入它无法转换为数字,所以它停止并返回目前找到的结果。

    MDN:

    parseFloat 是一个顶级函数,不与任何 对象。

    parseFloat 解析它的参数,一个字符串,并返回一个浮点数 数字。如果遇到符号(+ 或 -)以外的字符, 数字 (0-9)、小数点或指数,它返回值 到那时并忽略那个角色和所有成功的人 人物。允许前导和尾随空格。

    如果第一个字符不能转换为数字,则parseFloat 返回 NaN。

    出于算术目的,NaN 值不是任何基数的数字。 可以调用 isNaN 函数来判断结果是否 parseFloat 是 NaN。如果将 NaN 传递给算术运算,则 运算结果也会是 NaN。

    【讨论】:

    • 字符“E”是什么特殊字符? 6e2 = 6 x 10^2;所以,E = 10 对吗?如果对吗?怎么可能?任何文档或参考...
    • 有趣的是那些 W3Schools 文档不太正确。不要求第一个字符是数字。如果有前导空格,它将超越那些。 +1虽然。 :)
    • @MohamadSofiyan - 是的,基本上。如果它的读数是 6e2,它会很聪明地意识到您正在使用科学记数法。
    • MDN 有a better description(当然)。 ;)
    • @Adam 我也用过 :( 直到我开始注意到他们拥有的一些东西是......错误的,它只是不起作用。更不用说它充满了不好的做法。它是真遗憾它们被如此广泛地使用。
    【解决方案2】:

    parseFloat() 函数确定指定字符串中的第一个字符是否为数字。如果它是数字,那么它会解析字符串直到到达数字的末尾,并将数字作为数字返回,而不是作为字符串。

    所以 parseFloat("6b2") 返回 6。

    所以 parseFloat("6c2") 返回 6。

    【讨论】:

      【解决方案3】:

      对于第一个,是因为它把e当作指数符号(^)

      其他两个只有 6,因为一旦数字结束,它就会忽略其余的

      【讨论】:

      • 从技术上讲,它认为它是*10^,否则你会得到 36
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2011-02-21
      • 2022-11-11
      • 2021-07-10
      • 1970-01-01
      相关资源
      最近更新 更多