Как работать с очень большими целыми числами
Короткий ответ
Обычные числа точны только до 2 в степени 53. Для больших целых используйте BigInt — числа с суффиксом n:
console.log(9007199254740993);
console.log(String(9007199254740993n));Результат:
9007199254740992
9007199254740993Вычисления
Числа BigInt поддерживают обычные операторы, но оба операнда должны быть BigInt:
const big = 2n ** 64n;
console.log(big.toString());
console.log((big / 3n).toString());Результат:
18446744073709551616
6148914691236517205Из строки
Большие идентификаторы часто приходят строками. BigInt() превращает их в числа без потери цифр:
const id = BigInt('123456789012345678901');
console.log((id + 1n).toString());Результат:
123456789012345678902Частая ошибка
Нельзя смешивать BigInt и обычные числа в одной операции. Явно преобразуйте одно из них:
try {
console.log(10n + 1);
} catch (error) {
console.log(error.message);
}
console.log((10n + BigInt(1)).toString());Результат:
Cannot mix BigInt and other types, use explicit conversions
11Функции из этого ответа
- BigInt — Целые числа любой длины — без потери точности.
- Number.MAX_SAFE_INTEGER — Наибольшее целое число, которое хранится без потери точности.