【每日一题】JS 中 Number 类型的可以表示的范围是多少

信息卡片

  • 时间:2019-08-01
  • tag: Number 二进制 精度

题目描述

JS中Number是双精度浮点型, 意味着可以表示的范围是2^63次方么?如果不是的话,应该是多少呢?

思路

JavaScript 的 Number 类型为 IEEE 754 64 位浮点类型。最近出了 stage3 BigInt 任意精度数字类型,已经进入 stage3 规范。

JavaScript 的 Number 类型使用 53 位表示小数位,10 位表示指数位,1 位表示符号位。因此指数部分最大值为 2^10=1024。因此对于 Number 的范围,应该是 2^1024, 也就是 1.7976931348623157e+308.

这个数字在计算器中是打印不出来的, 至于原因,大家自己想一下。

其实我们可以稍微估算一下 2^1024的值。

log(2^1024) = 1024*log(2) = 1024 * 0.30102999566398114 = 308.2547155599167

因此大概范围应该是 10^308

对应地,整数的表示范围就是 -2^532^53 之间(不含两个端点).

参考代码

答案是 1.7976931348623157e+308, 其实也就是 Number.MAX_VALUE的值。

var biggestInt = Number.MAX_VALUE;
// 1.7976931348623157e+308

如果是整数的范围的话,JavaScript 能够准确表示的整数范围在-2^53 到 2^53 之间(不含两个端点), 超过这个范围,无法精确表示这个整数。(详情请参阅 ECMAScript standard, chapter 6.1.6 The Number Type):

var biggestInt = Number.MAX_SAFE_INTEGER;
//9007199254740991
var smallestInt = Number.MIN_SAFE_INTEGER;
//-9007199254740991

在解析序列化的 JSON 时,如果 JSON 解析器将它们强制转换为 Number 类型,那么超出此范围的整数值可能会被破坏。在工作中使用 String 类型代替,是一个可行的解决方案。

原文发布于微信公众号 - 脑洞前端(fe_lucifer)

原文发表时间:2019-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券