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 對(duì)象
const BigNumber = require('bignumber.js');
// 從字符串創(chuàng)建
const num1 = new BigNumber('123456789012345678901234567890');
// 從數(shù)字創(chuàng)建
const num2 = new BigNumber(12345);
// 從科學(xué)計(jì)數(shù)法創(chuàng)建
const num3 = new BigNumber('1.23e+18');(2) 基本運(yùn)算
BigNumber 支持加、減、乘、除等基本運(yùn)算:
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é)計(jì)數(shù)法
console.log(num.toExponential(4)); // "1.2346e+9"3. 高級(jí)用法
(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é)計(jì)數(shù)法
const sciNum = new BigNumber('1.23e+18');
console.log(sciNum.toString()); // "1230000000000000000"4. 注意事項(xiàng)
(1) 避免直接使用 Number 類型
BigNumber 對(duì)象不能直接與 JavaScript 的 Number 類型進(jìn)行運(yùn)算,必須先將 Number 轉(zhuǎn)換為 BigNumber:
const a = new BigNumber('12345678901234567890');
const b = 12345;
// 錯(cuò)誤:直接與 Number 類型運(yùn)算
// const sum = a + b;
// 正確:將 Number 轉(zhuǎn)換為 BigNumber
const sum = a.plus(new BigNumber(b));(2) 避免精度丟失
在創(chuàng)建 BigNumber 時(shí),盡量使用字符串而不是數(shù)字,以避免精度丟失:
// 錯(cuò)誤:精度丟失
const num1 = new BigNumber(12345678901234567890); // 12345678901234567000
// 正確:使用字符串
const num2 = new BigNumber('12345678901234567890'); // 12345678901234567890(3) 處理除零錯(cuò)誤
BigNumber 會(huì)拋出除零錯(cuò)誤:
try {
const result = new BigNumber('10').dividedBy('0');
} catch (e) {
console.error("Division by zero!");
}5. 與其他庫(kù)的比較
| 特性 | BigNumber (bignumber.js) | BigInt (原生) | Decimal.js |
|---|---|---|---|
| 支持大整數(shù) | ? | ? | ? |
| 支持高精度小數(shù) | ? | ? | ? |
| 支持科學(xué)計(jì)數(shù)法 | ? | ? | ? |
| 鏈?zhǔn)秸{(diào)用 | ? | ? | ? |
| 原生支持 | ? | ? | ? |
6. 總結(jié)
BigNumber 是 JavaScript 中處理大整數(shù)和高精度小數(shù)的強(qiáng)大工具,適用于以下場(chǎng)景:
超出
Number類型范圍的整數(shù)運(yùn)算。需要高精度的小數(shù)運(yùn)算。
科學(xué)計(jì)算或金融計(jì)算。
到此這篇關(guān)于js中BigNumber的使用詳解的文章就介紹到這了,更多相關(guān)js BigNumber使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js實(shí)現(xiàn)左右兩側(cè)浮動(dòng)廣告
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)左右兩側(cè)浮動(dòng)廣告,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
在JavaScript中獲取請(qǐng)求的URL參數(shù)[正則]
在ASP.NET后臺(tái)代碼中,對(duì)于這樣的URL請(qǐng)求地址:http://www.abc.com?id=001,我們可以通過(guò)Request.QueryString["id"]的方法很容易的獲取到URL中請(qǐng)求的參數(shù)的值,但是要在前臺(tái)js代碼中獲取請(qǐng)求的參數(shù)的值,應(yīng)該怎么做呢?2010-12-12
全面接觸神奇的Bootstrap導(dǎo)航條實(shí)戰(zhàn)篇
導(dǎo)航條(navbar)在Bootstrap中是一個(gè)獨(dú)立組件,導(dǎo)航條(navbar)和導(dǎo)航(nav)在Bootstrap中是有明顯區(qū)別的,本文全面接觸神奇的Bootstrap導(dǎo)航條,感興趣的小伙伴們可以參考一下2016-08-08
一個(gè)獲取第n個(gè)元素節(jié)點(diǎn)的js函數(shù)
這篇文章主要介紹了一個(gè)獲取第n個(gè)元素節(jié)點(diǎn)的js函數(shù),功能還不完善 ,需要的朋友可以參考下2014-09-09
JavaScript中Array.find()方法的使用與技巧
在JavaScript中,Array.find是一個(gè)高效且易用的數(shù)組查找方法,和其他遍歷方法相比,Array.find不僅能更簡(jiǎn)潔地找到符合條件的第一個(gè)元素,返回的元素是原數(shù)組中的引用,本文給大家介紹了JavaScript中Array.find()方法的使用與技巧,需要的朋友可以參考下2025-02-02
javascript設(shè)計(jì)模式 – 原型模式原理與應(yīng)用實(shí)例分析
這篇文章主要介紹了javascript設(shè)計(jì)模式 – 原型模式,結(jié)合實(shí)例形式分析了javascript原型模式相關(guān)概念、原理、應(yīng)用場(chǎng)景及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04

