JavaScript中精度问题以及解决方案

JavaScript 中使用的是 64 位双精度浮点数来存储数字。可以表示的数字的绝对值范围大约是:-1.79E+308 ~ +1.79E+308。超出这个范围的数就不一定能准确表示,就会产生精度问题。而计算机计算时是二进制,技术完成转换为十进制就超出了范围。

JavaScript中精度丢失的经典问题

浮点精度

1
0.1+0.2 === 0.3  // false

大数精度

1
9999999999999999 == 10000000000000001

解决方案

将浮点数乘以10^n使其成为整数,计算后再将结果除以10^n,n为他们之中最大的小数位。比如0.1 + 0.2,可以转化为(0.110+0.210)/10。不过如果小数位太多可能造成大数精度问题,不过一般不会用到超大整数。这里只针对一般类似电商使用的小金额。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!