和其他语言,例如 Java 和 Python 不同,JS 的所有数字,包括整数和小数都只有一种类型 - Number(IEEE 754)。它使用 64 位固定长度来表示,也就是 double 双精度浮点数。也就是 JS 没有 float 32位的单精度。
64位比特分为三部分:符号位;指数位;尾数位。
- 符号位S:第 1 位是正负数符号位(sign),0代表正数,1代表负数
- 指数位E:中间的 11 位存储指数(exponent),用来表示多少次方
- 尾数位M:最后的 52 位是尾数(mantissa),超出的部分自动进一舍零
文章图片
number 更多参考这一篇详细的文章.
JS 里有三个不错的处理大数的包:big.js; bignumber.js; decimal.js
他们的详细比较看这里。这三个包,外加这篇比较文章都是同一个开发者 :) 。简单来说
- big.js: 使用最简单,最小巧;但是只有十进制,不处理 NaN 和 Infinity 等;
- bignumber.js: 2-64 进制都支持,支持更多方法,文件大小是 big.js 的2倍;
- decimal.js: 2-64 进制都支持,非整数的指数运算, exp, ln, log; 随机数等等;