专栏首页脑洞前端【每日一题】JS 中 Number 类型的可以表示的范围是多少

【每日一题】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),作者:一个脑洞很大的程序员

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 内核地址空间大冒险:系统调用

    我是一个线程,出生在这个Linux帝国,今天我的任务是去执行一段人类用C语言编写的代码。

    lucifer210
  • 《丢鸡蛋问题》重制版来袭~

    https://leetcode-cn.com/problems/super-egg-drop/

    lucifer210
  • V8 8.5 带来的三个实用新特性!

    Promise 新增了一个 any 方法,它接收一个 Promise 数组,当数组中某一个 Promise 为 fulfilled 后,它返回的 Promise...

    lucifer210
  • Java泛型的协变与逆变

    泛型是Java最基础的语法之一,众所周知:出于安全原因,泛型默认不能支持型变(否则会引入危险),因此Java提供了通配符上限和通配符下限来支持型变,其中通配符上...

    疯狂软件李刚
  • Kubernetes Scheduler原理解析

    本文是对Kubernetes Scheduler的算法解读和原理解析,重点介绍了预选(Predicates)和优选(Priorities)步骤的原理,并介绍了默...

    Walton
  • 【新梦想老师分享】分布式锁的正确"姿势"

    在如今高并发、分布式大行其道的今天,如果你还只会单体项目,那未免也太落伍了。撇开技术落伍、受人耻笑外(脸皮厚的人根本不在乎耻笑),更为现实的问题是:如果你是刚进...

    新梦想IT职业教育
  • Codeforces Round #404 (Div. 2)(A.水,暴力,B,排序,贪心)

    A. Anton and Polyhedrons time limit per test:2 seconds memory limit per test:256...

    Angel_Kitty
  • 「投资人说」峰锐资本李丰:投资人视角看未来5年

    镁客网
  • Django实战-添加应用

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • fatal:Ambiguous objec nam : "origin/master"

    重命名本地分支即可。 git branch -m origin/master master

    MickyInvQ

扫码关注云+社区

领取腾讯云代金券