【问题标题】:Is it possible to parseFloat the whole string?是否可以解析整个字符串?
【发布时间】:2010-07-15 15:28:11
【问题描述】:

如您所知,javascript 的 parseFloat 函数仅在遇到无效字符之前有效,例如

parseFloat("10.123") = 10.123
parseFloat("12=zzzz") = 12
parseFloat("z12") = NaN

如果 whole 字符串不是有效的浮点数,是否有 parseFloat 的方法或实现会返回 NaN?

【问题讨论】:

    标签: javascript parsefloat


    【解决方案1】:

    改用这个:

    var num = Number(value);
    

    那么你可以这样做:

    if (isNaN(num)) {
        // take proper action
    }
    

    【讨论】:

    • 这比我的回答更好:)
    • 请注意一些特定情况,例如:isNaN(parseFloat("")); // trueNumber("") == 0; // true
    • @exoboy - 您无需使用此解决方案处理非法字符。试试这个,你会看到: var x = Number("#!"); if (isNaN(x)) alert("bad");
    • @exoboy - 我不确定我是否理解,当我运行你的示例时,我得到 num 的 NaN,这是我所期望的,因为 ")(*(*&()*H3.4 " 不是一个有效的浮点数。另外,您在第二次警报调用之前离开了 else 子句,所以也许您应该测试您的代码;)。无论如何,这里不需要敌对。
    • @exoboy: Number 不会“强制”字符串中的数字。这是一个将字符串convert 转换为数字的函数,if 它是一个有效数字。如果整个字符串是有效数字,则要求仅产生一个数字的问题。
    【解决方案2】:

    不妨试试:

    var f = parseFloat( someStr );
    if( f.toString() != someStr ) {
      // string has other stuff besides the number
    }
    

    更新:不要这样做,使用@dcp的方法:)

    【讨论】:

    • +1 用于提供解决问题的答案,然后指示 OP 使用您认为更好的答案。
    • 这确实是解决这个问题的不好方法,因为它不适用于像“12.5000”这样的值。
    • @HoLyVieR:是的,这实际上取决于您的数据来自哪里。除非您明确说明,否则大多数序列化值的语言不会用零填充。由于Number() 解决了这些问题(它自己有一些警告),所以没有必要这样做。
    【解决方案3】:
    var asFloat = parseFloat("12aa");
    if (String(asFloat).length != "12aa".length) {
         // The value is not completely a float
    }
    else {
         // The value is a float
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多