# JavaScript 数字

JavaScript数字全部是浮点数。根据IEEE 754标准中的64位二进制(binary64), 也称作双精度规范(double precision)来储存。使用64个字节来存储

1 + 11 + 52

64位bit分为三个部分:

  • 符号位S:第 1 位是正负数符号位(sign),0代表正数,1代表负数
  • 指数位E:中间的 11 位存储指数(exponent),用来表示次方数
  • 尾数位M:最后的 52 位是尾数(mantissa),超出的部分自动进一舍

接下来我们会使用二进制(虽然这并不是通常的浮点数表示方式)。并用一个%作为前缀来标识 虽然JavaScript数字是以二进制保存的,但输出(打印)时通常是以10进制显示。

0.1 + 0.2 == 0.3   //false
0.1 + 0.2 === 0.3  //false

原因:在于在javascript中,所有的数字都是浮点数并且使用二进制表示,表示一个0.1,在十进制中没有问题),但是在二进制中表示会带来无限循环。所以必然要引入精度的问题

# 最大范围

ECMAScript规范中也添加了1个Number常量最大安全整数Number.MAX_SAFE_INTEGER,该值为9007199254740992 (2^53 -1)

注意:

  1. 这里为53 而非52
  2. 最大的位数只有16位,如果超出16位,会出现精度丢失的问题
  3. js引擎在工作的时候为了效率,可能会使用内存32位而非64位

# 参考

  1. https://segmentfault.com/q/1010000038232026
陕ICP备20004732号-3