April 15

Изучаем BigInt в JavaScript

Работаем с огромными числами без потери точности

🔢 Что такое BigInt?

BigInt — это тип, который позволяет безопасно работать с большими целочисленными значениями. Наибольшее число, которое JavaScript может надежно представить с помощью примитива Number, — это 2^53 – 1, выраженное константой MAX_SAFE_INTEGER.

В отличие от стандартного типа Number, BigInt способен представлять целые числа с произвольной точностью, что позволяет избежать проблем при работе с очень большими числами.

🌐 Как использовать BigInt?

Чтобы создать BigInt, добавьте n в конец целочисленного литерала или используйте функцию BigInt():

const hugeNumber = 9007199254740991n; // BigInt

const anotherHugeNumber = BigInt("9007199254740991"); // также BigInt

Пример потери точности:

// Обычные числа

let regularNumber = 9007199254740992; // это максимальное целое число в JavaScript

console.log(regularNumber); // Вывод: 9007199254740992

console.log(regularNumber + 1); // Вывод: 9007199254740992 (потеря точности)

// Использование BigInt

let bigIntNumber = BigInt("9007199254740992000"); // используем строку для создания BigInt

console.log(bigIntNumber); // Вывод: 9007199254740992000n

console.log(bigIntNumber + 1n); // Вывод: 9007199254740992001n (без потери точности)

👾 Когда стоит использовать?

  1. Когда вам нужно работать с очень большими числами, которые не помещаются в обычные числовые типы (например факториалы, числа Фибоначчи, большие простые числа).

Пример:

function factorial(n) {

if (n === 0n) return 1n;

return n * factorial(n - 1n);

}

const result = factorial(1000n); // очень большое число!

  1. Когда вы обрабатываете большие объемы данных, например в финансовых приложениях или аналитике.

Пример:

const transactions = [1097857843333489700n, 297678444489000n, 506553670n, 1507899978870n]; // большие суммы

const totalAmount = transactions.reduce((sum, amount) => sum + amount, 0n);

⚠️ Ограничения:

  1. BigInt не может быть использован с методами Math и не должен смешиваться с обычными числами типа Number в арифметических операциях.
  2. Будьте осторожны при преобразовании между BigInt и Number (возможна потеря точности).