欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > js中 BigNumber 的使用

js中 BigNumber 的使用

2025/3/13 12:52:30 来源:https://blog.csdn.net/guapilixianghe/article/details/146159158  浏览:    关键词: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) 创建 BigNumber 对象

const BigNumber = require('bignumber.js');// 从字符串创建
const num1 = new BigNumber('123456789012345678901234567890');// 从数字创建
const num2 = new BigNumber(12345);// 从科学计数法创建
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');// 转换为字符串
console.log(num.toString()); // "1234567890.123456789"// 保留小数位数
console.log(num.toFixed(4)); // "1234567890.1235"// 科学计数法
console.log(num.toExponential(4)); // "1.2346e+9"

3. 高级用法

(1) 链式调用

BigNumber 支持链式调用:

const result = new BigNumber('1234567890').plus('9876543210').times('2').dividedBy('3').toFixed(2);console.log(result); // "7407407400.00"

(2) 处理精度

BigNumber 可以设置全局精度:

// 设置全局精度为 10 位小数
BigNumber.set({ DECIMAL_PLACES: 10 });const num = new BigNumber('1').dividedBy('3');
console.log(num.toString()); // "0.3333333333"

(3) 处理大整数

BigNumber 可以处理超出 JavaScript 安全整数范围的大整数:

const bigInt = new BigNumber('123456789012345678901234567890');
console.log(bigInt.toString()); // "123456789012345678901234567890"

(4) 处理科学计数法

const sciNum = new BigNumber('1.23e+18');
console.log(sciNum.toString()); // "1230000000000000000"

4. 注意事项

(1) 避免直接使用 Number 类型

BigNumber 对象不能直接与 JavaScript 的 Number 类型进行运算,必须先将 Number 转换为 BigNumber

const a = new BigNumber('12345678901234567890');
const b = 12345;// 错误:直接与 Number 类型运算
// const sum = a + b;// 正确:将 Number 转换为 BigNumber
const sum = a.plus(new BigNumber(b));

(2) 避免精度丢失

在创建 BigNumber 时,尽量使用字符串而不是数字,以避免精度丢失:

// 错误:精度丢失
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
支持大整数
支持高精度小数
支持科学计数法
链式调用
原生支持

6. 总结

BigNumber 是 JavaScript 中处理大整数和高精度小数的强大工具,适用于以下场景:

  • 超出 Number 类型范围的整数运算。

  • 需要高精度的小数运算。

  • 科学计算或金融计算。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词