parseFloat()
**parseFloat()
** 函数解析字符串参数并返回一个浮点数。
试试看
语法
parseFloat(string)
参数
返回值
从给定 string
解析的浮点数,或当第一个非空白字符无法转换为数字时为 NaN
。
注意:JavaScript 在语言级别没有“浮点数”和“整数”的区分。parseInt()
和 parseFloat()
仅在解析行为方面有所不同,但它们的返回值并不一定不同。例如,parseInt("42")
和 parseFloat("42")
将返回相同的值:一个Number
42。
描述
parseFloat
函数将其第一个参数转换为字符串,将该字符串解析为十进制数字字面量,然后返回一个数字或 NaN
。它接受的数字语法可以概括为
parseFloat()
接受的字符包括加号 (+
)、减号 (-
U+002D HYPHEN-MINUS)、十进制数字 (0
–9
)、小数点 (.
)、指数指示符 (e
或E
) 以及"Infinity"
字面量。+
/-
符号只能出现在字符串的开头,或者紧随e
/E
字符之后。小数点只能出现一次,并且只能出现在e
/E
字符之前。e
/E
字符只能出现一次,并且只有在它之前至少有一个数字时才会出现。- 参数中的前导空格将被修剪并忽略。
parseFloat()
还可以解析并返回Infinity
或-Infinity
,如果字符串以"Infinity"
或"-Infinity"
开头,前面没有或有多个空格。parseFloat()
从开头选择最长的子字符串,该子字符串生成有效的数字字面量。如果遇到无效字符,它将返回到该点为止表示的数字,忽略无效字符以及其后的所有字符。- 如果参数的第一个字符不能根据上述语法启动合法的数字字面量,
parseFloat
将返回NaN
。
从语法上讲,parseFloat()
解析 Number()
函数接受的语法的子集。也就是说,parseFloat()
不支持带有 0x
、0b
或 0o
前缀的非十进制字面量,但支持其他所有内容。但是,parseFloat()
比 Number()
更宽松,因为它会忽略尾部的无效字符,而这些字符会导致 Number()
返回 NaN
。
与数字字面量和 Number()
类似,从 parseFloat()
返回的数字可能不完全等于字符串表示的数字,因为浮点数范围和精度的原因。对于超出 -1.7976931348623158e+308
– 1.7976931348623158e+308
范围的数字(参见 Number.MAX_VALUE
),将返回 -Infinity
或 Infinity
。
示例
使用 parseFloat()
以下示例都返回 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() {
return "3.14";
},
});
parseFloat() 返回 NaN
以下示例返回 NaN
parseFloat("FF2");
从轶事来看,因为字符串 NaN
本身是 parseFloat()
接受的无效语法,所以传递 "NaN"
也会返回 NaN
。
parseFloat("NaN"); // NaN
返回 Infinity
当数字超出双精度 64 位 IEEE 754-2019 格式范围时,将返回 Infinity 值
parseFloat("1.7976931348623159e+308"); // Infinity
parseFloat("-1.7976931348623159e+308"); // -Infinity
当字符串以 "Infinity"
或 "-Infinity"
开头时,也会返回 Infinity
parseFloat("Infinity"); // Infinity
parseFloat("-Infinity"); // -Infinity
与 BigInt 值的交互
parseFloat()
不处理 BigInt
值。它在 n
字符处停止,并将前面的字符串视为普通整数,可能导致精度损失。如果将 BigInt 值传递给 parseFloat()
,它将被转换为字符串,并且字符串将被解析为浮点数,这也会导致精度损失。
parseFloat(900719925474099267n); // 900719925474099300
parseFloat("900719925474099267n"); // 900719925474099300
您应该将字符串传递给 BigInt()
函数,而不是使用尾随的 n
字符。
BigInt("900719925474099267");
// 900719925474099267n
规范
规范 |
---|
ECMAScript 语言规范 # sec-parsefloat-string |
浏览器兼容性
BCD 表格仅在浏览器中加载