在 ES2020 中如何使用大数 BigInt 进行精确计算
ES2020 是 ECMAScript 的第十个版本,于 2020 年 6 月发布。其中一个新特性是 BigInt,它可以用来表示超出 JavaScript 数字范围的整数,解决了在 JS 中进行高精度的计算的问题。
使用 BigInt
BigInt 类型的值在代码中的表示方式为整数后面跟一个大写字母“N”,例如:12345678901234567890n。在进行计算时,只有同类型的 BigInt 变量才能进行运算,否则会抛出错误。
// 使用 BigInt const a = 12345678901234567890n; const b = BigInt("9876543210987654321");
console.log(a + b); // 22222222113122222211n
同时,BigInt 也支持所有数字类型的基本运算符:加、减、乘、除、求余、指数运算等:
const a = 12345678901234567890n; const b = 9876543210987654321n;
console.log(a + b); // 22222222113122222211n console.log(a - b); // 2356915680256913529n console.log(a * b); // 121932631137021795423998069386426641970n console.log(a / b); // 124.99999999999999723675280662522737445711n console.log(a % b); // 4493582642507036689n console.log(a ** 2); // 152415787532388367501905199875019052100n
使用 BigInt 进行位运算
BigInt 还支持所有数字类型的位运算符,包括按位与、按位或、按位异或、左移、右移等操作。由于 BigInt 值的表示范围比 JavaScript 数字类型大得多,所以它支持的位运算也更加灵活。
const x = 0b11111000011110000n; const y = 0b0000111100001111n;
console.log(x & y); // 0n console.log(x | y); // 18446744073709551615n console.log(x ^ y); // 18446744073709551615n console.log(x << 16); // 18374913077930621952n console.log(x >> 4); // 1159641175081192n
使用 BigInt 进行比较运算
由于 BigInt 值比 JavaScript 数字类型的值更加复杂,所以在进行比较运算时,需要使用 BigInt 提供的方法,例如:实例方法比较(.compareTo())、比较运算符(>、<、==等)、等价(.equals())等。
const a = 999999999999999999999999n; const b = 1000000000000000000000000n;
console.log(a < b); // true console.log(a > b); // false console.log(a == b); // false console.log(a.equals(999999999999999999999999n)); // true
使用 BigInt 进行更加复杂的计算
使用 BigInt 进行精确计算的非常实用的场景,例如:计算超大型的数字、进行加密算法、处理高精度的数据等。下面是一个使用 BigInt 进行阶乘计算的例子:
function fact(n) { let result = 1n; while (n > 0n) { result *= n; n -= 1n; } return result; }
console.log(fact(100n)); // 9332621544394415268169923885626670049071596826438162146859296389521759999322991560894146397615651828625369792082722375825118521091686400000000000000000000n
总结
在 ES2020 中,BigInt 是一个很实用的新特性,它可以帮助程序员们处理超大型的数字计算问题,并且在进行高精度的计算时,使用 BigInt 可以保证结果的精确性。对于使用 JavaScript 进行大型项目的开发人员而言,了解 BigInt 如何使用是非常有指导意义的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645de442968c7c53b004185a