【问题标题】:parseFloat with characters after number [duplicate]parseFloat 与数字后的字符[重复]
【发布时间】:2020-02-20 16:36:12
【问题描述】:

我有一个输入,用户输入一个数字、整数或浮点数。我想知道它的数字是否正确,例如,检查输入2r 是否不正确。我的第一种方法是使用parseFloat,但它并没有抱怨:

parseFloat('2r')   // returns 2

其实这是docs的预期行为

如何检查2r 是否有误?

【问题讨论】:

    标签: javascript parsefloat


    【解决方案1】:

    这是预期的行为 - parseFloat 和类似的行为将忽略实数之后的任何“垃圾”。

    如果您需要从整体上验证这是一个实数,那么可以使用多种策略,其中最简单的方法是尝试数学运算,例如乘以一。

    【讨论】:

    • '2r' + 0 只会导致'2r0'...
    • 正如迈克所说,这是预期的行为。见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。使用 Number() 函数进行更严格的解析,如本参考中所述。
    • parseFloat('2r' + 0) 再次返回 2
    • 对不起,小姐记得 - parseFloat('2r' * 1) 给出 NaN
    【解决方案2】:

    这不是parseFloat 的错误,看起来你在追求别的东西。

    试试号码;

    Number('2r'); // returns Nan
    

    【讨论】:

    【解决方案3】:

    它是well documented

    如果 parseFloat 遇到加号 (+) 以外的字符,则减号 符号 (- U+002D HYPHEN-MINUS)、数字 (0–9)、小数点 (.) 或 指数(e 或 E),它返回该字符之前的值,忽略 无效字符及其后面的字符。

    以下示例均返回 3.14:

    parseFloat(3.14);
    parseFloat('3.14');
    parseFloat('  3.14  ');
    parseFloat('314e-2');
    parseFloat('0.0314E+2');
    parseFloat('3.14some non-digit characters');
    parseFloat({ toString: function() { return "3.14" } });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      相关资源
      最近更新 更多