前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每日一题】JS 中 Number 类型的可以表示的范围是多少

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

作者头像
lucifer210
发布2019-08-16 11:17:35
4.2K0
发布2019-08-16 11:17:35
举报
文章被收录于专栏:脑洞前端脑洞前端

信息卡片

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

题目描述

代码语言:javascript
复制
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的值。

代码语言:javascript
复制
log(2^1024) = 1024*log(2) = 1024 * 0.30102999566398114 = 308.2547155599167

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

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

参考代码

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

代码语言:javascript
复制
var biggestInt = Number.MAX_VALUE;
// 1.7976931348623157e+308

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

代码语言:javascript
复制
var biggestInt = Number.MAX_SAFE_INTEGER;
//9007199254740991
var smallestInt = Number.MIN_SAFE_INTEGER;
//-9007199254740991

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 脑洞前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 思路
  • 参考代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档