parseFloat('4.2.2')产生4.2而不是NaN?

时间:2013-02-23 16:30:16

标签: javascript parsing

我试图破坏我的代码时发现了这种意外的行为...有人可以向我解释为什么会这样,以及应该如何确保提供的值是真正的浮动?

例如:

alert(parseFloat('4.2.2'));

我期待NaN ...而不是我得到的。

我做了一个非常简单的jsfiddle演示here

4 个答案:

答案 0 :(得分:7)

这就是parseFloatparseInt方法的工作原理。它们解析输入无效的点。仅当第一个字符无效时,它们才会返回NaN


引用https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseFloat

  

parseFloat解析其参数,一个字符串,并返回一个浮点数。如果遇到符号(+或 - ),数字(0-9),小数点或指数以外的字符,则返回到该点的值,并忽略该字符和所有后续字符。允许前导和尾随空格。

     

如果第一个字符无法转换为数字,parseFloat会返回NaN


检查字符串是否是您可以使用的数字(来自Validate decimal numbers in JavaScript - IsNumeric()

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

答案 1 :(得分:2)

将float返回到字符串并比较它们是否相等

答案 2 :(得分:2)

parseFloat 从左到右解析其字符串参数,直到遇到错误条件,此时它会停止解析。

根据mozilla

  

parseFloat解析其参数,一个字符串,并返回一个浮点数。如果遇到符号(+或 - ),数字(0-9),小数点或指数以外的字符,则返回到该点的值,并忽略该字符和所有后续字符。如果第一个字符无法转换为数字,则parseFloat将返回NaN。

所以它开始从左到右解析一个浮点数,直到它再也无法解析它。在你的情况下,事情工作正常,直到遇到第二个小数位。此时,它不再是有效的浮点数,因此它会停止解析。

在另一个例子中,如果你调用parseFloat('100ASDF'),它将返回100,而不是NaN。

答案 3 :(得分:2)

当您阅读docs时,似乎已经足够基本了:

  

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