当前位置:首页 > JavaScript

js实现大数

2026-02-02 07:02:41JavaScript

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; // 报错

第三方库方案

对于更复杂的大数运算(包括浮点数),可以使用以下库:

js实现大数

  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"
  2. decimal.js:

    js实现大数

    const Decimal = require('decimal.js');
    let a = new Decimal('0.1');
    let b = a.plus('0.2');
    console.log(b.toString()); // "0.3"
  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 等专门库处理。

标签: 大数js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在H…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、…