JavaScript BigInt — цілі числа без обмеження точності
BigInt зберігає цілі числа будь-якого розміру — більші за межу, після якої звичайний Number починає брехати.
Загальний опис
Звичайні числа в JavaScript — це числа з рухомою комою подвійної точності, і цілі вони зберігають точно лише до 9007199254740991 (Number.MAX_SAFE_INTEGER). Далі починається тихе безумство: 9007199254740993 дорівнює 9007199254740992, а рівність двох різних чисел раптом стає true.
Це не теорія: id у Twitter і Discord, суми в копійках, мітки часу в наносекундах — усе це виходить за межу.
BigInt створюють літералом із суфіксом n (123n) або функцією BigInt(123). Точність — необмежена, обмежує лише пам'ять.
- Нотатка
-
автор: NagarDBigIntне змішується зNumberв арифметиці —1n + 1кидаєTypeError. Це навмисно: мовчазне перетворення повернуло б утрату точності, від якоїBigIntі рятує.
Синтаксис
const big = 9007199254740993n;
методи
| Метод | Опис |
|---|---|
| toString | Рядкове подання числа в заданій системі числення. |
| asIntN | Обрізає BigInt до знакового числа з N біт. |
| asUintN | Обрізає BigInt до беззнакового числа з N біт. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| BigInt | 67+ | 68+ | 14+ | 54+ | 79+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| BigInt | 67+ | yes | yes | 14+ |
Приклади
+ запропонувати свій приклад у пісочниці
Межа точності Number і як її оминає BigInt.
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
// звичайне число тут уже бреше
console.log(9007199254740993 === 9007199254740992); // true (!)
const big = 9007199254740993n;
console.log(big + 1n); // 9007199254740994n — точно
// змішувати не можна
// console.log(big + 1); // TypeError
console.log(big + BigInt(1)); // так правильно
// порівняння працює, бо не втрачає точності
console.log(10n > 5); // true
Коментарі
Коментарів ще немає — будьте першим!