[js]数值的精度

基础知识

js内部所有数字在计算机内存中的表示都是64位双精度浮点数

双精度浮点数表示法的副作用

使用二进制浮点数(使用IEEE 754的所有语言)的最著名副作用是:

0.1 + 0.2 === 0.3; // false

js最大安全整数的概念

Number.MAX_SAFE_INTEGER // 9007199254740991

这个数字形成的原因是,Javascript 使用 IEEE 754 中规定的双精度浮点数。所谓安全是指在这个范围内的整数,js可以精确地进行表示并精确地进行比较运算,否则就会输出错误的值。

国际标准 IEEE 754 规定,有效数字第一位默认总是1,不保存在64位浮点数之中。也就是说,有效数字总是1.xxxx的形式,其中xxxx的部分(称为尾数或有效数字,负责数字的精度)保存在64位浮点数(见fraction部分,共52位),最长可能为52位。因此(算上第一位不显示的位)JavaScript 提供的有效数字最长为53个二进制位。

64位双精度浮点数示意图

精度最多只能到53个二进制位,这意味着,绝对值小于2的53次方的整数,即-(253-1)到253-1,都可以精确表示。

参考

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
http://javascript.ruanyifeng.com/grammar/number.html#toc1

你可能感兴趣的:([js]数值的精度)