Javascript數字計算不准確的問題,一不注意就容易對我們的項目產生或大或小的影響。
所以我們需要了解下Javascript計算精度問題產生的原因 及一些解決辦法。
原理
一個數字以二進制的形式存儲在內存中,是一個只有 1 和 0 的序列。在十進制數字系統中雖然看起來很簡單,但0.1,0.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])); },
