parseFloat('4.2.2.')生成4.2而不是NaN
parseFloat('4.2.2') yields 4.2 instead of NaN?
我在尝试破坏代码时发现了这种意外行为。。。有人能向我解释一下为什么会这样,以及应该如何确保提供的价值是真正的浮动吗?
例如:
alert(parseFloat('4.2.2'));
我期待NaN
。。。不是我得到的。
我在这里做了一个非常简单的jsfiddle演示。
这就是parseFloat
和parseInt
方法的工作方式。它们解析到输入无效的地步。只有当第一个字符无效时,它们才会返回NaN
。。
引用https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseFloat
parseFloat
解析其参数(一个字符串(,并返回一个浮点数。如果遇到符号(+或-(、数字(0-9(、小数点或指数以外的字符,则返回该点之前的值,并忽略该字符和所有后续字符。允许使用前导空格和尾随空格。如果第一个字符无法转换为数字,则
parseFloat
返回NaN
。
要检查字符串是否为数字,可以使用(来自JavaScript-IsNumeric((中的Validate decimal numbers(
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
将返回浮点值解析为字符串,并比较它们是否等于
当你阅读文档时,它似乎足够基本了:
parseFloat解析其参数,一个字符串,并返回一个浮点数字如果遇到符号(+或-(以外的字符,数字(0-9(、小数点或指数,它返回值到了那个地步,却忽略了那个角色和所有成功的人字符。允许使用前导空格和尾随空格。
parseFloat从左到右解析其字符串参数,直到遇到错误条件,此时停止解析。
根据mozilla
parseFloat解析其参数,一个字符串,并返回一个浮点数。如果遇到符号(+或-(、数字(0-9(、小数点或指数以外的字符,则返回该点之前的值,并忽略该字符和所有后续字符。如果第一个字符无法转换为数字,parseFloat将返回NaN。
因此,它开始从左到右解析一个float,直到无法再解析为止。在您的情况下,在遇到小数点后第二位之前,一切都很顺利。此时,它不再是一个有效的float,因此它停止解析。
在另一个示例中,如果调用parseFloat("100ASDF"(,它将返回100,而不是NaN。
- JavaScript NaN equvialence
- 如何为排除无穷大和NaN的数字声明Flow类型
- 为什么我在这个javaScript代码中使用NaN
- 如何防止Math.max()返回NaN
- 函数将输出nan而不是数字,为什么
- jquery中出现NaN错误.已经尝试过ParseInt,但仍然不起作用
- 尝试求和时,在我的表的页脚中返回$NaN
- 我的jquery中出现NaN错误
- 金额结果为NaN
- 试图了解如何使用parseFloat将字符串转换为数字
- 使用running total时使用Javascript$NaN
- 使用jquery CounterUp提供NaN的百万值
- 为什么Math.pow(1,无穷大)返回NaN
- parseFloat() returning NaN
- parseFloat 在应该是 -0.1 或 0.1 时不断返回 NaN
- parseFloat返回NaN javascript编号
- 浮点数和parseFloat的乘法返回NaN
- parseFloat为瑞典文化提供NaN
- parseFloat('4.2.2.')生成4.2而不是NaN
- 为什么parseInt(Infinity)返回NaN,parseFloat(Infinity)返回无穷大