我试图破坏我的代码时发现了这种意外的行为...有人可以向我解释为什么会这样,以及应该如何确保提供的值是真正的浮动?
例如:
alert(parseFloat('4.2.2'));
我期待NaN
...而不是我得到的。
我做了一个非常简单的jsfiddle演示here。
答案 0 :(得分:7)
这就是parseFloat
和parseInt
方法的工作原理。它们解析输入无效的点。仅当第一个字符无效时,它们才会返回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),小数点或指数,它返回值 到那时为止,忽略了那个角色并且都成功了 字符即可。允许前导和尾随空格。