说明:Math.fround()函数

时间:2017-06-29 06:34:48

标签: javascript angularjs angular typescript math

如何运作Math.fround()

  

Math.fround()函数返回数字的最近浮点表示。

但是当它传递浮点数Math.fround(1.5)时,它返回相同的(1.5)值。 但是当它传递浮点数Math.fround(1.55)时,它返回一个不同的值1.5499999523162841为什么以及如何?

  
      
  • 我对Math.fround()如何运作感到困惑。
  •   
  • Math.round()功能有什么不同?
  •   
  • 另请告诉我Internet Explorer
  • 不支持的原因   

2 个答案:

答案 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.51.55这样做。

Math.fround(1.5)

1)代表64位浮点数

0 01111111111 1000000000000000000000000000000000000000000000000000

2)代表科学记数法

1.1000000000000000000000000000000000000000000000000000 x 2^0

3)舍入到23位尾数

1.10000000000000000000000

4)转换为十进制:

1.5

Math.fround(1.55)

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()时,将执行以下步骤:

  • 如果x是NaN,则返回NaN。
  • 如果x是+ 0,-0,+∞,-∞之一,则返回x。
  • 设x32是使用roundTiesToEven将x转换为IEEE 754-2008 binary32格式的值的结果。
  • 让x64成为将x32转换为IEEE 754-2008 binary64格式的值的结果。
  • 返回与x64对应的ECMAScript Number值。

如果支持Float32Array,可以使用以下函数进行模拟:

Math.fround = Math.fround || (function (array) {
  return function(x) {
    return array[0] = x, array[0];
  };
})(Float32Array(1));

** 请分享更多答案以了解更多详情