JavaScript 中精度问题以及解决方案
原文:https://www.runoob.com/w3cnote/js-precision-problem-and-solution.html
JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示。其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在 ES5 规范 中指出了指数位E的取值范围是 [-1074, 971]。
精度问题汇总
想用有限的位来表示无穷的数字,显然是不可能的,因此会出现一些列精度问题:
- 浮点数精度问题,比如
0.1 + 0.2 !== 0.3
- 大数精度问题,比如
9999 9999 9999 9999 == 1000 0000 0000 0000 1
- toFixed 四舍五入结果不准确,比如
1.335.toFixed(2) == 1.33
浮点数精度和 toFixed 其实属于同一类问题,都是由于浮点数无法精确表示引起的,如下:
(1.335).toPrecision(20); // "1.3349999999999999645"
而关于大数精度问题,我们可以先看下面这个代码片段: