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]));
    },

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM