From c122e669dc51154051076421223195ca43855035 Mon Sep 17 00:00:00 2001 From: picc-lu <32639909+picc-lu@users.noreply.github.com> Date: Fri, 5 Jan 2018 11:57:53 +0800 Subject: [PATCH] Update Math.fround MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 基于 IEEE 754 标准修改 Math.fround 一节的介绍 --- docs/number.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/number.md b/docs/number.md index faaf212..ee73958 100644 --- a/docs/number.md +++ b/docs/number.md @@ -543,8 +543,8 @@ Math.imul(0x7fffffff, 0x7fffffff) // 1 对于 -2 的 24 次方至 2 的 24 次方(不含两端)的整数,返回结果与参数本身一致。 ```javascript -Math.fround(0) // 0 -Math.fround(1) // 1 +Math.fround(0) // 0 +Math.fround(1)   // 1 Math.fround(2 ** 24 - 1) // 16777215 ``` @@ -558,9 +558,27 @@ Math.fround(2 ** 24 + 1) // 16777216 `Math.fround` 方法主要将双精度浮点数转为单精度浮点数,第 25 位二进制数尝试往上一位进位,它与它往后的位数全部丢弃。 ```javascript +// 未丢失有效精度 Math.fround(1.125) // 1.125 -Math.fround(0.3) // 0.30000001192092896 -Math.fround(0.8)   // 0.800000011920929 +Math.fround(7.25) // 7.25 + +// 丢失精度 +Math.fround(0.3)   // 0.30000001192092896 +Math.fround(0.7)   // 0.699999988079071 +Math.fround(1.0000000123) // 1 +``` + +对于 NaN 和 Infinity ,此方法返回原值。其它类型而言,`Math.fround` 方法会将其转为数值再返回单精度浮点数。 + +```javascript +Math.fround(NaN) // NaN +Math.fround(Infinity) // Infinity + +Math.fround('5') // 5 +Math.fround(true) // 1 +Math.fround(null) // 0 +Math.fround([]) // 0 +Math.fround({}) // NaN ``` 对于没有部署这个方法的环境,可以用下面的代码模拟。