程序中的数值

背景

  • 聊下Java和js的数值类型,这个地方也是开发中容易出错的地方。
  • IEEE 754 浮点“双精度格式” 标准。

资料

  • 计算机只存储和运算都是二进制数据。我们常用的十进制数据在存储和运算的时候需要转换为二进制。
  • js 没有java的整数和浮点值的概念,统一用的number类型。

以js number 64位双精度结构:

upload successful

  • sign 1个符号位 代表正负
  • exponent 11个指数位 代表指数信息
  • fraction 52个尾数位 代表数值信息
1
2
3
4
5
6
举个例子,如果是5.5这个数字的话,则计算过程是这样的:
5.5 转二进制 =====> 101.1 科学计数法 =====> 1.011*2^2 
存入计算机: 
符号位:0 
指数位:2 加1023 =====> 1025 转二进制 =====> 10000000001 
尾数位:1.011 隐去小数点左边的1 =====> 011

upload successful

  • js 不丢失精度的最大值就是2的52次方减去1 如果超过这个值并且小于 MAX_VALUE,可用表示但是精度会丢失.