奇奇怪怪小问题-JS精度丢失
如果我说 0.1 + 0.2 != 0.3 你相信吗
不信F12 试一下
了解了一下,原来如此。
JavaScript语言中,所有的数字类型都是以64位浮点数形式存储的,也就是说,JavaScript没有真正意义上的整数。这种设计会导致一些精度丢失的问题。
-
大数精度问题:在JavaScript中,能够安全表示的最大整数为
Number.MAX_SAFE_INTEGER
(即 2^53 - 1),超过这个数的整数可能会导致精度丢失。例如:console.log(9007199254740993 === 9007199254740992 + 1); // 输出 true,实际上这两个数是不等的
-
小数精度问题:由于计算机采用二进制存储,一些在十进制看起来完全正常的小数,在二进制中可能是无限循环的。这就可能导致一些看似简单的小数计算,结果却与预期不符。例如:
console.log(0.1 + 0.2 === 0.3); // 输出 false,实际上我们期望的结果是 true console.log(0.1 + 0.2); // 输出 0.30000000000000004