試一試
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
對於 32 位浮點數來說太大了,因此返回 Infinity。
js
2 ** 150; // 1.42724769270596e+45
Math.fround(2 ** 150); // Infinity
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-math.fround |
瀏覽器相容性
載入中…