js number 实现标准
JavaScript 数字实现标准
JavaScript 的数字实现遵循 ECMAScript 标准(ECMA-262),具体基于 IEEE 754 双精度浮点数标准(64位)。以下是核心实现细节:
数字类型
JavaScript 仅有一种数字类型 Number,采用双精度浮点数表示,占用 64 位内存:
- 1 位符号位
- 11 位指数位
- 52 位尾数位(有效数字)
数值范围为:
- 最大安全整数:
2^53 - 1(Number.MAX_SAFE_INTEGER= 9007199254740991) - 最小安全整数:
-2^53 + 1(Number.MIN_SAFE_INTEGER= -9007199254740991) - 最大浮点值:
1.7976931348623157e+308(Number.MAX_VALUE) - 最小浮点值:
5e-324(Number.MIN_VALUE)
特殊值
NaN(Not a Number):非数字值,通过isNaN()检测Infinity和-Infinity:超出数值范围时的表示+0和-0:符号位不同的零值,通过1/+0和1/-0可区分
精度问题
由于二进制浮点数特性,十进制小数可能无法精确表示:
0.1 + 0.2 === 0.3; // false
解决方法:
- 使用整数运算后缩放(如以分为单位计算金额)
- 使用
toFixed()控制显示精度(注意返回字符串) - 引入第三方库如
decimal.js
新特性
ES6 新增:
Number.isInteger()检测整数Number.isSafeInteger()检测安全整数Number.EPSILON表示最小精度差值(约 2.22e-16)Number.parseInt()和Number.parseFloat()全局方法的移植
BigInt
ES2020 引入 BigInt 类型解决大整数问题:
const bigNum = 9007199254740991n;
bigNum + 1n; // 正确运算






