为啥会有精度问题

我猜你肯定问或被问过,在JS 中0.1+0.2为啥不等于0.3。

那是因为js 中的数据是使用64位双精度浮点型来表示的。用有限的位数来表示无穷的数字,显然是不可能滴。

js 在进行运算时,比如 0.1 +0.2 。会将,0.1 和0.2 分别转化成二进制的数,然后进行运算,运算完成后,也会得到一个二进制的数,然后检查这个结果,有没有上下溢出,如果溢出就会产生精度问题。

详细可见链接: JS基础 | 浮点数计算原理剖析 - 掘金

常见的精度问题

1. 浮点数计算,如 0.1+02

2. 大数计算,如 9999999999+1

3. toFixed 不准确,如(55535.225).toFixed(2) => 55535.22

解决方案

我认为目前最优的解法,就是将数字,转化成字符串,进行模拟运算。

现在有相对比较成熟的库 bignumber.js  decimal.js  big.js

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐