Math.fround()

基线 广泛可用

此功能已相当成熟,并在许多设备和浏览器版本中运行良好。它从以下时间起在所有浏览器中都可用 2015 年 7 月.

Math.fround() 静态方法返回数字的最近32 位单精度 浮点数表示形式。

试一试

语法

js
Math.fround(doubleFloat)

参数

doubleFloat

一个数字。

返回值

doubleFloat 的最近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

2 150 2^150 对于 32 位浮点数而言太大,因此返回 Infinity

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

规范

规范
ECMAScript 语言规范
# sec-math.fround

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅