js中BigNumber的使用詳解
1. 安裝 bignumber.js
(1) 使用 npm 安裝
npm install bignumber.js
(2) 在瀏覽器中使用
<script src="https://cdn.jsdelivr.net/npm/bignumber.js@9.0.2/bignumber.min.js"></script>
2. 基本用法
(1) 創(chuàng)建 BigNumber 對象
const BigNumber = require('bignumber.js'); // 從字符串創(chuàng)建 const num1 = new BigNumber('123456789012345678901234567890'); // 從數(shù)字創(chuàng)建 const num2 = new BigNumber(12345); // 從科學(xué)計數(shù)法創(chuàng)建 const num3 = new BigNumber('1.23e+18');
(2) 基本運算
BigNumber
支持加、減、乘、除等基本運算:
const a = new BigNumber('12345678901234567890'); const b = new BigNumber('98765432109876543210'); // 加法 const sum = a.plus(b); // 111111111011111111100 // 減法 const diff = a.minus(b); // -86419753208641975320 // 乘法 const product = a.times(b); // 1219326311370217952237463801111263526900 // 除法 const quotient = a.dividedBy(b); // 0.12499999886093750001
(3) 比較大小
const x = new BigNumber('12345678901234567890'); const y = new BigNumber('98765432109876543210'); // 是否相等 console.log(x.isEqualTo(y)); // false // 是否大于 console.log(x.isGreaterThan(y)); // false // 是否小于 console.log(x.isLessThan(y)); // true
(4) 取整和取模
const num = new BigNumber('123.456'); // 取整 const integerPart = num.integerValue(); // 123 // 四舍五入 const rounded = num.round(); // 123 // 取模 const remainder = num.modulo(10); // 3.456
(5) 格式化輸出
const num = new BigNumber('1234567890.123456789'); // 轉(zhuǎn)換為字符串 console.log(num.toString()); // "1234567890.123456789" // 保留小數(shù)位數(shù) console.log(num.toFixed(4)); // "1234567890.1235" // 科學(xué)計數(shù)法 console.log(num.toExponential(4)); // "1.2346e+9"
3. 高級用法
(1) 鏈?zhǔn)秸{(diào)用
BigNumber
支持鏈?zhǔn)秸{(diào)用:
const result = new BigNumber('1234567890') .plus('9876543210') .times('2') .dividedBy('3') .toFixed(2); console.log(result); // "7407407400.00"
(2) 處理精度
BigNumber
可以設(shè)置全局精度:
// 設(shè)置全局精度為 10 位小數(shù) BigNumber.set({ DECIMAL_PLACES: 10 }); const num = new BigNumber('1').dividedBy('3'); console.log(num.toString()); // "0.3333333333"
(3) 處理大整數(shù)
BigNumber
可以處理超出 JavaScript 安全整數(shù)范圍的大整數(shù):
const bigInt = new BigNumber('123456789012345678901234567890'); console.log(bigInt.toString()); // "123456789012345678901234567890"
(4) 處理科學(xué)計數(shù)法
const sciNum = new BigNumber('1.23e+18'); console.log(sciNum.toString()); // "1230000000000000000"
4. 注意事項
(1) 避免直接使用 Number 類型
BigNumber
對象不能直接與 JavaScript 的 Number
類型進(jìn)行運算,必須先將 Number
轉(zhuǎn)換為 BigNumber
:
const a = new BigNumber('12345678901234567890'); const b = 12345; // 錯誤:直接與 Number 類型運算 // const sum = a + b; // 正確:將 Number 轉(zhuǎn)換為 BigNumber const sum = a.plus(new BigNumber(b));
(2) 避免精度丟失
在創(chuàng)建 BigNumber
時,盡量使用字符串而不是數(shù)字,以避免精度丟失:
// 錯誤:精度丟失 const num1 = new BigNumber(12345678901234567890); // 12345678901234567000 // 正確:使用字符串 const num2 = new BigNumber('12345678901234567890'); // 12345678901234567890
(3) 處理除零錯誤
BigNumber
會拋出除零錯誤:
try { const result = new BigNumber('10').dividedBy('0'); } catch (e) { console.error("Division by zero!"); }
5. 與其他庫的比較
特性 | BigNumber (bignumber.js) | BigInt (原生) | Decimal.js |
---|---|---|---|
支持大整數(shù) | ? | ? | ? |
支持高精度小數(shù) | ? | ? | ? |
支持科學(xué)計數(shù)法 | ? | ? | ? |
鏈?zhǔn)秸{(diào)用 | ? | ? | ? |
原生支持 | ? | ? | ? |
6. 總結(jié)
BigNumber
是 JavaScript 中處理大整數(shù)和高精度小數(shù)的強(qiáng)大工具,適用于以下場景:
超出
Number
類型范圍的整數(shù)運算。需要高精度的小數(shù)運算。
科學(xué)計算或金融計算。
到此這篇關(guān)于js中BigNumber的使用詳解的文章就介紹到這了,更多相關(guān)js BigNumber使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript實現(xiàn)的平方米、畝、公頃單位換算小程序
這篇文章主要介紹了javascript實現(xiàn)的平方米、畝、公頃單位換算小程序,此代碼通過URL傳參的方式使用,也可以根據(jù)自己的需求做些改動,需要的朋友可以參考下2014-08-08js 動態(tài)添加標(biāo)簽(新增一行,其實很簡單,就是幾個函數(shù)的應(yīng)用)
把所有代碼拷下另存為一個html文件,在瀏覽器中打開,點擊“新增一行”按鈕就可以,以下是對js函數(shù)的解釋2009-03-0312個非常有創(chuàng)意的JavaScript小游戲
JavaScript 在Web開發(fā)過程中已經(jīng)是必不可少的重要分子,他推動著Web的交互性往越來越高的層次發(fā)展,現(xiàn)在的很多Web游戲也基于這類語言開發(fā)。2010-03-03JS實現(xiàn)的定時器展示簡單秒表、頁面彈框及跳轉(zhuǎn)操作完整示例
這篇文章主要介紹了JS實現(xiàn)的定時器展示簡單秒表、頁面彈框及跳轉(zhuǎn)操作,結(jié)合實例形式分析了JavaScript時間函數(shù)及頁面元素動態(tài)操作相關(guān)使用技巧,需要的朋友可以參考下2020-01-01JavaScript如何利用Promise控制并發(fā)請求個數(shù)
大家都知道js是單線程,并不存在真正的并發(fā),但是由于JavaScript的Event Loop機(jī)制,使得異步函數(shù)調(diào)用有了“并發(fā)”這樣的假象。這篇文章主要給大家介紹了關(guān)于JavaScript如何利用Promise控制并發(fā)請求個數(shù)的相關(guān)資料,需要的朋友可以參考下2021-05-05使用phantomjs進(jìn)行網(wǎng)頁抓取的實現(xiàn)代碼
這篇文章主要介紹了使用phantomjs進(jìn)行網(wǎng)頁抓取的實現(xiàn)代碼,需要的朋友可以參考下2014-09-09js setTimeout()函數(shù)介紹及應(yīng)用以倒計時為例
setTimeout() 方法用于在指定的毫秒數(shù)后調(diào)用函數(shù)或計算表達(dá)式,下面有個倒計時的示例,需要的朋友可以學(xué)習(xí)下2013-12-12