试一试
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 |
浏览器兼容性
加载中…