在日常编程中,我们经常需要进行各种计算,但在使用 JavaScript 进行计算时,由于 JavaScript 采用 64 位双精度浮点数表示数字,所以在进行一些大数字计算时,会存在精度丢失等情况。ECMAScript 2020 中添加了BigInt类型,可以用于处理更大的整数值。本文将介绍如何使用 BigInt 类型实现更高精度计算。
BigInt 类型介绍
BigInt 类型可以精确地表示任意大的整数,其精度不受 64 位双精度浮点数的限制。在 BigInt 类型中,每位数字的值可以是 0 或 1,而不是 0 到 9。BigInt 类型通过在数字后面添加 n 来表示,如:
const big = 123456789012345678901234567890n;
BigInt 类型与 Number 类型的区别
BigInt 类型与 Number 类型的区别在于其可以表示更大范围的数字,并且不会受到精度丢失的影响。在 BigInt 类型中,数字的范围可以达到 2 的 53 次方以上,而在 Number 类型中则最多只能表示到 2 的 53 次方。
下面是一个简单示例,演示了在进行较大数字计算时 Number 类型会产生精度丢失的问题:
const a = 9007199254740991; // Number类型 const b = 123456789; // Number类型 const c = a + b; console.log(c); // 输出:9007199254864459
在这个示例中,由于 Number 类型最多只能表示到 2 的 53 次方,所以在进行 a + b 运算时,数字的精度已经失去了。
下面是一个使用 BigInt 类型进行高精度计算的示例代码:
const a = 123456789012345678901234567890n; // BigInt类型 const b = 987654321098765432109876543210n; // BigInt类型 const c = a + b; console.log(c); // 输出:11111111111111111111111111111111
在这个示例中,由于使用了 BigInt 类型,所以可以轻易地进行更高精度的计算,并且不会出现精度丢失的情况。
BigInt 类型的使用方法
创建 BigInt 类型对象
在 JavaScript 中创建 BigInt 类型对象有两种方式:
使用字面量
字面量是最简单的创建 BigInt 类型对象的方法,只需在数字末尾添加 n 即可:
const big1 = 123n; const big2 = 123456789012345678901234567890n;
调用 BigInt 函数
可以使用 BigInt 函数将 Number 类型数值转换为 BigInt 类型数值:
const big3 = BigInt(123); const big4 = BigInt("123456789012345678901234567890");
BigInt 类型的运算
与 Number 类型一样,BigInt 类型支持基本的数学运算,包括加、减、乘、除及求余数等。下面是示例代码:
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; const c = a + b; // 加 const d = a - b; // 减 const e = a * b; // 乘 const f = a / b; // 除 const g = a % b; // 求余数
需要注意的是,BigInt 类型与其它 Number 类型之间不能互相运算,必须先将其它类型转换为 BigInt 类型。
const a = 123; // Number类型 const b = 456n; // BigInt类型 const c = BigInt(a); // 将Number类型转换为BigInt类型 const d = a + b; // 会抛出错误 const e = c + b; // 正确运算
结论
通过使用 ECMAScript 2020 中的 BigInt 类型,可以很方便地实现更高精度的计算,避免了使用普通 Number 类型时可能出现的精度丢失问题。需要注意的是,BigInt 类型与其它类型的运算需要进行类型转换。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671a29029babaf620fa1b1ff