当前位置: 首页 > news >正文

JavaScript 大数运算!

全文目录:

    • 开篇语
    • 前言
    • 1. 使用原生 JavaScript 进行大数运算
      • 1.1 `BigInt` 类型(ECMAScript 2020)
        • 创建 `BigInt`
        • BigInt 运算
      • 1.2 与 `Number` 类型的混用
      • 1.3 `BigInt` 除法注意事项
        • 结论:
    • 2. 使用第三方库进行大数运算
      • 2.1 **Big.js**
        • 安装 Big.js
        • 示例:使用 Big.js 进行大数运算
      • 2.2 **bignumber.js**
        • 安装 bignumber.js
        • 示例:使用 bignumber.js 进行大数运算
      • 2.3 **Decimal.js**
        • 安装 Decimal.js
        • 示例:使用 Decimal.js 进行大数运算
    • 3. 总结
    • 文末

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在 JavaScript 中,数字类型 Number 是有限精度的,最大值为 Number.MAX_SAFE_INTEGER(即 2^53 - 1),这意味着当数字超过这个范围时,JavaScript 将无法精确表示数值,且可能会出现精度丢失的问题。

为了支持大数运算,JavaScript 提供了一些库和方法。通过这些工具,开发者可以处理超出 Number 类型精度范围的数字。本文将介绍如何使用原生 JavaScript 以及第三方库来进行大数运算。

1. 使用原生 JavaScript 进行大数运算

1.1 BigInt 类型(ECMAScript 2020)

BigInt 是 ECMAScript 2020 中引入的新数据类型,用于表示任意精度的整数。BigInt 允许你处理超出 Number 范围的整数,而不丧失精度。

创建 BigInt
// 使用 BigInt 构造函数
const bigNum1 = BigInt(1234567890123456789012345678901234567890);
console.log(bigNum1); // 输出: 1234567890123456789012345678901234567890n// 通过在数字后面加上 'n' 来创建 BigInt
const bigNum2 = 1234567890123456789012345678901234567890n;
console.log(bigNum2); // 输出: 1234567890123456789012345678901234567890n
BigInt 运算

BigInt 可以进行加、减、乘、除等基本的数学运算,但需要注意的是,BigInt 与普通的 Number 类型不能混用。如果需要与普通数字一起运算,你需要先将 Number 转换为 BigInt

const bigNum1 = 1234567890123456789012345678901234567890n;
const bigNum2 = 9876543210987654321098765432109876543210n;console.log(bigNum1 + bigNum2); // 输出: 11111111101111111110111111111011111111100n
console.log(bigNum1 - bigNum2); // 输出: -8641975320864197532086419753208641975320n
console.log(bigNum1 * bigNum2); // 输出: 121932631112635269000000000000000000000000000000000000n
console.log(bigNum2 / bigNum1); // 输出: 8n

1.2 与 Number 类型的混用

由于 BigIntNumber 不能直接混用,需要显式地转换类型:

const bigNum = 1234567890123456789012345678901234567890n;
const num = 10;console.log(bigNum + BigInt(num)); // 正确,转换 num 为 BigInt
console.log(Number(bigNum) + num); // 正确,转换 bigNum 为 Number

1.3 BigInt 除法注意事项

在进行 BigInt 除法时,结果将是一个整数。如果你希望得到浮动小数,应该避免使用 BigInt 类型。

const bigNum1 = 1234567890123456789012345678901234567890n;
const bigNum2 = 10n;console.log(bigNum1 / bigNum2); // 输出: 123456789012345678901234567890123456789n
结论:

BigInt 适用于处理任意精度的整数,特别是在需要处理非常大的数字(如金融、科学计算等)时,非常有用。


2. 使用第三方库进行大数运算

虽然 BigInt 提供了内建的支持,但它只支持整数运算,并且在某些浏览器或环境中不完全支持。如果你需要处理更复杂的大数运算(例如,浮点数、大整数与小数混合的计算),或者需要进行高精度计算,使用第三方库可能更合适。以下是一些常用的第三方库:

2.1 Big.js

Big.js 是一个非常流行的 JavaScript 库,用于处理高精度的浮点数运算。它支持任意精度的数字,适用于大数和高精度计算,避免了 JavaScript 中原生浮点数精度损失的问题。

安装 Big.js
npm install big.js
示例:使用 Big.js 进行大数运算
const Big = require('big.js');const num1 = new Big('1234567890123456789012345678901234567890');
const num2 = new Big('9876543210987654321098765432109876543210');console.log(num1.plus(num2).toString());  // 加法
console.log(num1.minus(num2).toString()); // 减法
console.log(num1.times(num2).toString()); // 乘法
console.log(num2.div(num1).toString());   // 除法

2.2 bignumber.js

bignumber.js 是另一个流行的 JavaScript 库,提供了高精度的数值运算。它支持常见的数学运算,并允许开发者轻松地操作大数和精度更高的数值。

安装 bignumber.js
npm install bignumber.js
示例:使用 bignumber.js 进行大数运算
const BigNumber = require('bignumber.js');const num1 = new BigNumber('1234567890123456789012345678901234567890');
const num2 = new BigNumber('9876543210987654321098765432109876543210');console.log(num1.plus(num2).toString());  // 加法
console.log(num1.minus(num2).toString()); // 减法
console.log(num1.times(num2).toString()); // 乘法
console.log(num2.div(num1).toString());   // 除法

2.3 Decimal.js

Decimal.js 是一个支持任意精度的库,提供了对大数、浮点数和精度问题的详细控制。它非常适合需要处理高精度浮点数的应用程序,如金融计算。

安装 Decimal.js
npm install decimal.js
示例:使用 Decimal.js 进行大数运算
const Decimal = require('decimal.js');const num1 = new Decimal('1234567890123456789012345678901234567890');
const num2 = new Decimal('9876543210987654321098765432109876543210');console.log(num1.plus(num2).toString());  // 加法
console.log(num1.minus(num2).toString()); // 减法
console.log(num1.times(num2).toString()); // 乘法
console.log(num2.div(num1).toString());   // 除法

3. 总结

JavaScript 中的原生 BigInt 类型已经为整数的任意精度计算提供了很好的支持,但如果你需要进行更复杂的高精度浮动小数计算,可以考虑使用第三方库,如 Big.jsbignumber.jsDecimal.js

  • BigInt:适用于高精度整数运算,直接内置于 JavaScript 中。
  • Big.js:适用于高精度浮动小数运算。
  • bignumber.js:适用于更广泛的高精度运算。
  • Decimal.js:适用于需要复杂精度控制的高精度计算,特别适合金融场景。

选择合适的工具能够帮助你有效解决 JavaScript 中的精度问题,并在大数运算场景中提高代码的稳定性和可靠性。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

http://www.dtcms.com/a/308414.html

相关文章:

  • Abp+ShardingCore+EFCore.BulkExtensions使用案例
  • MCU中的DAC(数字模拟转换器)是什么?
  • 动态挑战-响应机制和密钥轮换
  • 算法练习:JZ32 从上往下打印二叉树
  • iOS高级开发工程师面试——其他
  • 磁盘坏道检测工具在美国服务器硬件维护中的使用规范
  • Linux 计划任务管理
  • 【在线五子棋对战】十一、整合封装服务器模块实现
  • linux git ssh配置过程
  • chrome.storage 和 localStorage
  • 自动化与配置管理工具 ——SaltStack
  • 用 AI 自动生成口型同步视频,短视频内容也能一人完成
  • 基于深度学习的医学图像分析:使用YOLOv5实现医学图像目标检测
  • 测试平台进化论:如何在CI/CD时代重构软件质量防线
  • # 前端开发规范基础汇总
  • 掌握Python三大语句:顺序、条件与循环
  • 深度解析:基于Python构建的闲鱼自动化营销与信息发送机器人
  • 暄桐:如何脱离“不学无术”的状态?
  • 集成学习方法之随机森林:从原理到实战的深度解析
  • pip库版本升级
  • vue vxe-table :edit-config=“editConfig“ 可以编辑的表格
  • Netcat终极实战指南:从端口扫描到渗透测试
  • Multimodal Fusion on Low-quality Data: A Comprehensive Survey 中文版
  • Java面试高频题目
  • 基于notepad++的sensor寄存器序列文本处理方法(以后会随时更新补充)
  • STM32F1到STM32F0的标准库移植指南--GPIO篇
  • 认知绞肉机:个体实践视域下认知暴力与元认知升维的活体实验研究
  • 如何将 Redis 监控集成到微服务整体的监控体系中( 如 Prometheus + Grafana)
  • [12月考试] E
  • 使用EasyPOI实现Java订单数据导出(含多物料信息)——模板语法详解与实战