Функция среза Javascript, возвращающая разные значения для одного и того же значения?

#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 , если вы хотите получить большие числа.