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

瀏覽器相容性

另見