说明:Math.fround()函数

Ram*_*ran 4 javascript math angularjs typescript angular

工作原理如何Math.fround()运作.

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

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

  • 我很困惑如何Math.fround()工作.
  • 它与Math.round()功能有何不同?
  • 另请告诉我为什么它不受支持Internet Explorer.

Max*_*kyi 7

要了解此功能的工作原理,您实际上必须了解以下主题:

ECMA脚本为转换指定了以下算法:

使用参数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值.

所以,让我们做的1.51.55.

Math.fround(1.5)

1)代表64位浮点数

0 01111111111 1000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

2)代表科学记数法

1.1000000000000000000000000000000000000000000000000000 x 2^0
Run Code Online (Sandbox Code Playgroud)

3)舍入到23位尾数

1.10000000000000000000000
Run Code Online (Sandbox Code Playgroud)

4)转换为十进制:

1.5
Run Code Online (Sandbox Code Playgroud)

Math.fround(1.55)

1)代表64位浮点数

0 01111111111 1000110011001100110011001100110011001100110011001101
Run Code Online (Sandbox Code Playgroud)

2)代表科学记数法

1.1000110011001100110011001100110011001100110011001101 x 2^0
Run Code Online (Sandbox Code Playgroud)

3)舍入到23位尾数

1.10001100110011001100110
Run Code Online (Sandbox Code Playgroud)

4)转换为十进制:

1.5499999523162841
Run Code Online (Sandbox Code Playgroud)

  • @RameshRajendran,考虑接受它是否有帮助) (3认同)