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

浏览器兼容性

另见