js 数值表示方式

// -0 只在处理 Infinity 时和 +0 有区别

JavaScript 采用"IEEE 754 标准定义的双精度64位格式"("double-precision 64-bit format IEEE 754 values")表示数字。
// 因为是二进制表示,所以有些小数(不能被精确表示)计算精度有问题(所以 toFixed 也会有问题):
  • 0.1 + 0.2 !== 0.3
  • 512.06*100 !== 51206
  • 64.6/100 !== 0.646
// 小的整数可以被精确表示,所以整数除以 100 必定是个精确的数字,因为只是改一下指数而已。

它可以表示十进制的 15 或 16 位有效数字,其可以表示的数字的绝对值范围大约是

Number.MAX_VALUE 2**1024 // 2**2**10 // 指数确定
Number.MIN_VALUE 最小的正值 5e-324 == 2**-1024/1e15 // 指数和尾数共同确定
Number.MAX_SAFE_INTEGER 2^53-1 // 尾数确定
9007199254740992 === 9007199254740993
0.1111111111111111111 === 0.1111111111111111112

自动转科学计数法:
  1. 小数点前的数字多于21位
  2. 小于1的小数且小数点后的零多于5个

整数值通常被视为 32 位有符号整型变量,直到它被用于执行某些32位整型不支持的操作,这是为了便于进行位操作
// 负数用补码(Two's complement,只有 +0)表示,为了统一加减操作





  • sign bit(符号): 用来表示正负号
  • exponent(指数): 用来表示次方数 // 有正负
  • mantissa(尾数): 用来表示精确度 // 十进制能表示 17 位小数(2**-52) 位

指数规定:

  • :用来代表带符号的 0(尾数为 0)或下溢数(尾数不为 0)。
  • :用来代表无穷大(尾数为 0)或NaN(尾数不为 0)。
  • 其他:代表 2 的(exponent-0x3ff)次方。







123e-2 // 指数
0x11 // 十六进制
0b11 // 二进制
0o11 // 八进制

BigInt:111n