Math.fround()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

Math.fround() 靜態方法返回數字的 nearest 32 位單精度浮點數表示形式。

試一試

console.log(Math.fround(5.5));
// Expected output: 5.5

console.log(Math.fround(5.05));
// Expected output: 5.050000190734863

console.log(Math.fround(5));
// Expected output: 5

console.log(Math.fround(-5.05));
// Expected output: -5.050000190734863

語法

js
Math.fround(doubleFloat)

引數

doubleFloat

一個數字。

返回值

doubleFloat 的 nearest 32 位單精度浮點數表示形式。

描述

JavaScript 在內部使用 64 位雙精度浮點數,它提供了非常高的精度。然而,有時你可能正在處理 32 位浮點數,例如如果你正在從 Float32Array 讀取值。這可能會造成混淆:即使數字看起來相同,檢查 64 位浮點數和 32 位浮點數是否相等也可能失敗。

為了解決這個問題,可以使用 Math.fround() 將 64 位浮點數轉換為 32 位浮點數。在內部,JavaScript 繼續將該數字視為 64 位浮點數,它只是對尾數的第 23 位執行“舍入到偶數”,並將所有後續的尾數位設定為 0。如果數字超出了 32 位浮點數的範圍,則返回 Infinity-Infinity

因為 fround()Math 的一個靜態方法,所以你總是使用 Math.fround(),而不是你建立的 Math 物件的某個方法(Math 不是一個建構函式)。

示例

使用 Math.fround()

數字 1.5 在二進位制數制中可以精確表示,並且在 32 位和 64 位中是相同的。

js
Math.fround(1.5); // 1.5
Math.fround(1.5) === 1.5; // true

然而,數字 1.337 在二進位制數制中無法精確表示,因此在 32 位和 64 位中有所不同。

js
Math.fround(1.337); // 1.3370000123977661
Math.fround(1.337) === 1.337; // false

21502^150對於 32 位浮點數來說太大了,因此返回 Infinity

js
2 ** 150; // 1.42724769270596e+45
Math.fround(2 ** 150); // Infinity

規範

規範
ECMAScript® 2026 語言規範
# sec-math.fround

瀏覽器相容性

另見