JS 精度

Jun 17, 2021


参考这里

问题

公司使用雪花算法计算的主键有19位,比如:1022290185154633728
但是 WEB 端传递的主键会精度丢失

原因

JS 采用双精度存储,占用 64 bit,如图:

img

意义:

  • 1位用来表示符号位
  • 11位用来表示指数
  • 52位表示尾数

因此 JS 中能精准表示的最大整数是 Math.pow(2, 53) - 1,十进制即 9007199254740991,共计16位

这个数字也是 JS 中的 Number.MAX_SAFE_INTEGER

解决

主键交互使用 String 类型 o(╯□╰)o