parseFloat()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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

试一试

function circumference(r) {
  return parseFloat(r) * 2.0 * Math.PI;
}

console.log(circumference(4.567));
// Expected output: 28.695307297889173

console.log(circumference("4.567abcdefgh"));
// Expected output: 28.695307297889173

console.log(circumference("abcdefgh"));
// Expected output: NaN

语法

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 字符只能出现一次,并且只有在其前面至少有一个数字时才能出现。
  • 参数中的前导空格会被裁剪并忽略。
  • 如果字符串以 "Infinity""-Infinity" 开头,且前面有零个或多个空格,parseFloat() 也可以解析并返回 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® 2026 语言规范
# sec-parsefloat-string

浏览器兼容性

另见