js 计算精度问题以及科学计数法问题

Javascript数字计算不准确的问题,一不注意就容易对我们的项目产生或大或小的影响。

所以我们需要了解下Javascript计算精度问题产生的原因 及一些解决办法。

原理

一个数字以二进制的形式存储在内存中,是一个只有 1 和 0 的序列。在十进制数字系统中虽然看起来很简单,但0.10.2 这样的小数,实际上在二进制形式中是无限循环小数。

具体原因可以点这里了解其原理

 解决方法

1.bignumber.js

BigNumber.js是一个用于任意精度计算的js库。大概原理是将所有数字当做字符串,重新实现了计算逻辑。缺点是性能比原生的差很多。

安装方法

//安装
npm install bignumber.js --save
//引入
import BigNumber from 'bignumber.js'

放几个常用的方法,详细的文档里有。

// 转为 bignumber
const x= new BigNumber('0.1');
// 转为 普通数字
x.toNumber()

// 计算
x.plus(0.1)  // 加法
x.minus(0.1)  // 减法
x.times(0.1)  // 乘法
x.dividedBy(0.1)  // 除法

源码地址:https://github.com/MikeMcl/bignumber.js/releases

api文档:https://mikemcl.github.io/bignumber.js/

2.科学计数法转数字

有时会遇到科学计数法的情况,需要转成常规数字。

// 科学计数法转数字
    toNonExponential(num) {
      var m = num.toExponential().match(/\d(?:.(\d*))?e([+-]\d+)/);
      return num.toFixed(Math.max(0, (m[1] || "").length - m[2]));
    },

 

posted @ 2021-04-30 16:21  小明明同学  阅读(1675)  评论(0编辑  收藏  举报