js实现大数
JavaScript 实现大数运算
JavaScript 的 Number 类型采用 IEEE 754 标准,最大安全整数为 2^53 - 1(即 9007199254740991)。超过这个范围的整数运算需要使用大数处理技术。
使用 BigInt 类型
ES2020 引入了 BigInt 类型,可以直接处理大整数:
const bigNum = 9007199254740993n; // 注意后缀 n
console.log(bigNum + 1n); // 9007199254740994n
BigInt 支持所有常规算术运算,但不能与 Number 类型混合运算:
const sum = bigNum + BigInt(1); // 正确
const sum = bigNum + 1; // 报错
第三方库方案
对于更复杂的大数运算(包括浮点数),可以使用以下库:

-
bignumber.js:
const BigNumber = require('bignumber.js'); let x = new BigNumber('123456789.123456789'); let y = x.plus('987654321.987654321'); console.log(y.toString()); // "1111111111.11111111" -
decimal.js:

const Decimal = require('decimal.js'); let a = new Decimal('0.1'); let b = a.plus('0.2'); console.log(b.toString()); // "0.3" -
math.js:
const math = require('mathjs'); const hugeNum = math.bignumber('1e500'); const result = math.sqrt(hugeNum); console.log(math.format(result)); // "1e250"
手动实现加法算法
对于教育目的,可以手动实现大数加法:
function addBigNumbers(a, b) {
let carry = 0;
let result = [];
const maxLength = Math.max(a.length, b.length);
a = a.padStart(maxLength, '0');
b = b.padStart(maxLength, '0');
for (let i = maxLength - 1; i >= 0; i--) {
const sum = parseInt(a[i]) + parseInt(b[i]) + carry;
carry = Math.floor(sum / 10);
result.unshift(sum % 10);
}
if (carry) result.unshift(carry);
return result.join('');
}
console.log(addBigNumbers('999', '1')); // "1000"
注意事项
BigInt 不能与 Number 混合运算,需要显式转换:
Number(1n) + 2 // 3
1n + BigInt(2) // 3n
大数运算性能低于原生 Number 运算,仅在必要时使用。浮点数精度问题建议使用 decimal.js 等专门库处理。






