2019.5.21 前端小总结

字数 283阅读 17

1 js大数处理

js浮点处理,总有一些奇奇怪怪的问题,
比如

(0.3 - 0.2) >= 0.1                     // false
 0.1 + 0.2 === 0.30000000000000004
1000000000000000128 === 1000000000000000129

众所周知JS仅有Number这个数值类型,而Number采用的时IEEE 754 64位双精度浮点数编码。而浮点数表示方式具有以下特点:

  1. 浮点数可表示的值范围比同等位数的整数表示方式的值范围要大得多;
  2. 浮点数无法精确表示其值范围内的所有数值,而有符号和无符号整数则是精确表示其值范围内的每个数值;
  3. 浮点数只能精确表示m*2e的数值;
  4. 当biased-exponent为2e-1-1时,浮点数能精确表示该范围内的各整数值;
  5. 当biased-exponent不为2e-1-1时,浮点数不能精确表示该范围内的各整数值。

由于部分数值无法精确表示(存储),于是在运算统计后偏差会愈见明显。

然后我们可以用到一个大数处理库
https://github.com/MikeMcl/bignumber.js/
https://github.com/cryptocoinjs/bigi