parseFloat()

**parseFloat()** 函数解析字符串参数并返回一个浮点数。

试试看

语法

js
parseFloat(string)

参数

string

要解析的值,强制转换为字符串。此参数中的前导空白将被忽略。

返回值

从给定 string 解析的浮点数,或当第一个非空白字符无法转换为数字时为 NaN

注意:JavaScript 在语言级别没有“浮点数”和“整数”的区分。parseInt()parseFloat() 仅在解析行为方面有所不同,但它们的返回值并不一定不同。例如,parseInt("42")parseFloat("42") 将返回相同的值:一个Number 42。

描述

parseFloat 函数将其第一个参数转换为字符串,将该字符串解析为十进制数字字面量,然后返回一个数字或 NaN。它接受的数字语法可以概括为

  • parseFloat() 接受的字符包括加号 (+)、减号 (- U+002D HYPHEN-MINUS)、十进制数字 (09)、小数点 (.)、指数指示符 (eE) 以及 "Infinity" 字面量。
  • +/- 符号只能出现在字符串的开头,或者紧随 e/E 字符之后。小数点只能出现一次,并且只能出现在 e/E 字符之前。e/E 字符只能出现一次,并且只有在它之前至少有一个数字时才会出现。
  • 参数中的前导空格将被修剪并忽略。
  • parseFloat() 还可以解析并返回 Infinity-Infinity,如果字符串以 "Infinity""-Infinity" 开头,前面没有或有多个空格。
  • parseFloat() 从开头选择最长的子字符串,该子字符串生成有效的数字字面量。如果遇到无效字符,它将返回到该点为止表示的数字,忽略无效字符以及其后的所有字符。
  • 如果参数的第一个字符不能根据上述语法启动合法的数字字面量,parseFloat 将返回 NaN

从语法上讲,parseFloat() 解析 Number() 函数接受的语法的子集。也就是说,parseFloat() 不支持带有 0x0b0o 前缀的非十进制字面量,但支持其他所有内容。但是,parseFloat()Number() 更宽松,因为它会忽略尾部的无效字符,而这些字符会导致 Number() 返回 NaN

与数字字面量和 Number() 类似,从 parseFloat() 返回的数字可能不完全等于字符串表示的数字,因为浮点数范围和精度的原因。对于超出 -1.7976931348623158e+3081.7976931348623158e+308 范围的数字(参见 Number.MAX_VALUE),将返回 -InfinityInfinity

示例

使用 parseFloat()

以下示例都返回 3.14

js
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

js
parseFloat("FF2");

从轶事来看,因为字符串 NaN 本身是 parseFloat() 接受的无效语法,所以传递 "NaN" 也会返回 NaN

js
parseFloat("NaN"); // NaN

返回 Infinity

当数字超出双精度 64 位 IEEE 754-2019 格式范围时,将返回 Infinity 值

js
parseFloat("1.7976931348623159e+308"); // Infinity
parseFloat("-1.7976931348623159e+308"); // -Infinity

当字符串以 "Infinity""-Infinity" 开头时,也会返回 Infinity

js
parseFloat("Infinity"); // Infinity
parseFloat("-Infinity"); // -Infinity

与 BigInt 值的交互

parseFloat() 不处理 BigInt 值。它在 n 字符处停止,并将前面的字符串视为普通整数,可能导致精度损失。如果将 BigInt 值传递给 parseFloat(),它将被转换为字符串,并且字符串将被解析为浮点数,这也会导致精度损失。

js
parseFloat(900719925474099267n); // 900719925474099300
parseFloat("900719925474099267n"); // 900719925474099300

您应该将字符串传递给 BigInt() 函数,而不是使用尾随的 n 字符。

js
BigInt("900719925474099267");
// 900719925474099267n

规范

规范
ECMAScript 语言规范
# sec-parsefloat-string

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅