#javascript #string #numbers
#javascript #строка #числа
Вопрос:
я решаю вопрос на hackerrank и столкнулся с проблемой. мой метод среза не возвращает правильное значение. Я смог воссоздать с помощью console.log.
console.log( ("9007199254740993"));
console.log("9007199254740993");
почему они возвращают разные значения?
Комментарии:
1. javascript имеет ограничение на точность чисел.
2. я отредактировал код, будет ли у него все еще проблема с этой суммой?
3. да, в вашем первом примере это уже не строка, а число.
4. существует большое количество библиотек.
5. У вас здесь максимальное значение: Number.MAX_SAFE_INTEGER, я полагаю
Ответ №1:
Максимально возможное значение для числа JavaScript — 9007199254740991.
Чтобы иметь дело с числами, большими этого, вам нужно будет использовать BigInt.
const max = Number.MAX_SAFE_INTEGER;
console.log(max);
const maxPlusTwo = max 2;
console.log(maxPlusTwo);
const maxPlusTwoBigInt = BigInt("9007199254740993");
console.log(maxPlusTwoBigInt.toString());
Эта ссылка показывает текущий уровень встроенной поддержки BigInt. В зависимости от вашей целевой платформы вам может потребоваться использовать полизаполнение для функциональности BigInt.
Комментарии:
1. Вероятно, это преднамеренная часть задачи; вы могли бы рассмотреть возможность добавления чисел в стиле начальной школы «вручную», а не с помощью библиотеки.
Ответ №2:
JavaScript имеет максимально безопасное целочисленное ограничение 2^53 - 1
( 9,007,199,254,740,991
) — возможно, числа больше этого, но это не очень хорошо:
console.log(9007199254740992 200000000001);
console.log(Number.MAX_SAFE_INTEGER);
(Приведенный выше фрагмент показывает, что они разные — посмотрите на пятую и последнюю цифры).
Вам пришлось бы использовать экспериментальный метод BigInt
, если вы хотите получить большие числа.