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