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
类型的混用
由于 BigInt
和 Number
不能直接混用,需要显式地转换类型:
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.js
、bignumber.js
或 Decimal.js
。
BigInt
:适用于高精度整数运算,直接内置于 JavaScript 中。Big.js
:适用于高精度浮动小数运算。bignumber.js
:适用于更广泛的高精度运算。Decimal.js
:适用于需要复杂精度控制的高精度计算,特别适合金融场景。
选择合适的工具能够帮助你有效解决 JavaScript 中的精度问题,并在大数运算场景中提高代码的稳定性和可靠性。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!