导读:本期聚焦于小伙伴创作的《JS如何实现BigInt?大整数运算的原理与实现方法是什么》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《JS如何实现BigInt?大整数运算的原理与实现方法是什么》有用,将其分享出去将是对创作者最好的鼓励。

JavaScript中常规Number类型基于IEEE 754双精度浮点格式存储,安全整数范围仅为-2^53+1到2^53-1,超出该范围的整数会出现精度丢失问题。BigInt类型专门用于表示任意大的整数,能够完美解决大整数运算的精度问题,下面我们来详细了解其实现和运算方法。

JS如何实现BigInt?大整数运算的原理与实现方法是什么

BigInt的基本声明与使用

BigInt有两种常见的声明方式,一种是直接在整数后面添加n后缀,另一种是使用BigInt()构造函数进行转换,具体示例如下:

// 字面量方式声明BigInt
const bigNum1 = 123456789012345678901234567890n;
// 构造函数方式声明,参数可以是数字或字符串
const bigNum2 = BigInt(123);
const bigNum3 = BigInt("9007199254740993");

console.log(typeof bigNum1); // 输出 "bigint"
console.log(bigNum1); // 输出 123456789012345678901234567890n

BigInt与普通Number的核心区别

BigInt和Number虽然都用于表示数值,但存在诸多差异,主要区别如下:

  • BigInt是整数类型,不能表示小数,而Number可以表示整数和小数
  • BigInt没有安全整数范围限制,Number的安全整数范围是Number.MIN_SAFE_INTEGERNumber.MAX_SAFE_INTEGER
  • BigInt和Number不能直接混合运算,需要显式转换类型
  • BigInt不支持Math对象下的方法,需要自定义运算逻辑

大整数运算的实现方法

基础算术运算

BigInt支持标准的算术运算符,包括加减乘除和取余,运算规则与Number类似,示例如下:

const a = 1000000000000000000000n;
const b = 2000000000000000000000n;

// 加法运算
const sum = a + b; // 3000000000000000000000n
// 减法运算
const diff = b - a; // 1000000000000000000000n
// 乘法运算
const product = a * 3n; // 3000000000000000000000n
// 除法运算,结果会自动向下取整,舍弃小数部分
const quotient = b / 3n; // 666666666666666666666n
// 取余运算
const remainder = b % 3n; // 2n

比较运算与逻辑判断

BigInt可以和Number进行比较,只要两者数值相等就会返回true,同时BigInt也支持逻辑判断:

const big = 10n;
const num = 10;

console.log(big == num); // true,宽松相等比较时数值相等即可
console.log(big === num); // false,严格相等比较时类型不同返回false
console.log(big > 5n); // true
console.log(big < 20); // true,BigInt和Number可以比较大小

手动实现大整数运算(模拟底层逻辑)

如果需要在不支持BigInt的环境下实现大整数运算,可以将大整数拆分为数组,按位进行运算,下面以加法为例:

function addBigInt(str1, str2) {
    // 将字符串反转,方便从低位开始计算
    let arr1 = str1.split('').reverse();
    let arr2 = str2.split('').reverse();
    let result = [];
    let carry = 0; // 进位值

    const maxLen = Math.max(arr1.length, arr2.length);
    for (let i = 0; i < maxLen; i++) {
        const num1 = parseInt(arr1[i] || 0);
        const num2 = parseInt(arr2[i] || 0);
        const sum = num1 + num2 + carry;
        result.push(sum % 10);
        carry = Math.floor(sum / 10);
    }
    // 处理最后的进位
    if (carry > 0) {
        result.push(carry);
    }
    // 反转结果数组并拼接为字符串
    return result.reverse().join('');
}

console.log(addBigInt("12345678901234567890", "98765432109876543210")); 
// 输出 111111111011111111100

BigInt的使用注意事项

在使用BigInt时需要注意以下几点,避免出现语法错误或逻辑问题:

  • BigInt不能使用new关键字创建,new BigInt()会抛出语法错误
  • BigInt和Number混合运算时会抛出TypeError,需要提前转换类型
  • BigInt转换为Number时可能出现精度丢失,尤其是超出Number安全范围的大整数
  • JSON序列化不支持BigInt类型,直接序列化会抛出错误,需要自定义序列化逻辑

实战场景示例

下面以金融场景中的大额金额计算为例,演示BigInt的实际使用:

// 金额单位为分,避免小数问题,使用BigInt处理
const orderAmount = BigInt("100000000000000000"); // 1亿金额
const discountRate = 80n; // 8折
const finalAmount = orderAmount * discountRate / 100n;

console.log(`最终支付金额:${finalAmount}分`); 
// 输出 最终支付金额:80000000000000000分

BigIntJavaScript大整数运算高精度计算修改时间:2026-06-14 05:03:17

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。