Math.fround()
。
Math.fround()
函数返回数字的最近浮点表示。
但是当它传递浮点数Math.fround(1.5)
时,它返回相同的(1.5)值。
但是当它传递浮点数Math.fround(1.55)
时,它返回一个不同的值1.5499999523162841
。 为什么以及如何?
- 我对
Math.fround()
如何运作感到困惑。- 与
Math.round()
功能有什么不同?- 另请告诉我
不支持的原因Internet Explorer
。
答案 0 :(得分:7)
要了解此功能的工作原理,您实际上必须了解以下主题:
ECMA脚本为转换指定the following algorithm:
使用参数x调用Math.fround时,以下步骤为 采取:
- 如果x是NaN,则返回NaN。
- 如果x是+ 0,-0,+∞,-∞之一,则返回x。
- 设x32是将x转换为IEEE 754-2008 binary32中的值的结果 使用roundTiesToEven格式化。
- 让x64成为转换x32的结果 到IEEE 754-2008二进制64格式的值。
- 返回ECMAScript 与x64对应的数字值。
所以,让我们对1.5
和1.55
这样做。
1)代表64位浮点数
0 01111111111 1000000000000000000000000000000000000000000000000000
2)代表科学记数法
1.1000000000000000000000000000000000000000000000000000 x 2^0
3)舍入到23位尾数
1.10000000000000000000000
4)转换为十进制:
1.5
1)代表64位浮点数
0 01111111111 1000110011001100110011001100110011001100110011001101
2)代表科学记数法
1.1000110011001100110011001100110011001100110011001101 x 2^0
3)舍入到23位尾数
1.10001100110011001100110
4)转换为十进制:
1.5499999523162841
答案 1 :(得分:0)
我从以下文件中获得了这些内容。如果您有更多详细信息,请分享您的答案。
我从ECMAScript® 2015 Language Specification
找到了关于Math.fround ( x )
的内容
当使用参数x调用Math.fround()
时,将执行以下步骤:
如果支持Float32Array,可以使用以下函数进行模拟:
Math.fround = Math.fround || (function (array) {
return function(x) {
return array[0] = x, array[0];
};
})(Float32Array(1));
** 请分享更多答案以了解更多详情