Javascript 19-значный номер, меняющий последние цифры на нули

#javascript

#javascript

Вопрос:

Я столкнулся с этой проблемой при попытке получить последние 4 цифры числового значения из 19 цифр.

 let payload={
card: 1234567891238475891
}
let stringCardNumber = ''   payload.card;
console.log(payload.card)
console.log(stringCardNumber)
console.log( stringCardNumber.slice(stringCardNumber.length - 4))
let zeroedCardNumber = stringCardNumber.slice(0, 6)   "".padStart(stringCardNumber.length - 10, "0")   stringCardNumber.slice(stringCardNumber.length - 4);
console.log(zeroedCardNumber)  

Итак, для 1234567891238475891 журнала вывода 1234567891238475800 .

Изменение значения карты на строку в самом json — это не то решение, которое я ожидаю, поскольку будут случаи, когда ожидается число из 19 цифр.

Комментарии:

1. Числа JavaScript не могут содержать такие большие целые числа. Тип «Big Int» может, но он поддерживается не во всех браузерах. Вы все равно преобразуете число в строку, поэтому сделайте так, чтобы оно начиналось как строка.

2. У «json» не было бы этого значения, если бы оно не было строкой. Таким образом, ваше жестко заданное значение должно быть строкой, а не числом. playcode.io/697817

Ответ №1:

Это число слишком велико для числового представления JavaScript по умолчанию, поэтому вам нужно использовать более длинную форму с BigInt:

 card: 1234567891238475891n
  

Лучший подход — просто использовать строку, поскольку на самом деле это не «числа» в общепринятом смысле, и, как добавляет Pointy, поддержка BigInt является относительно новой вещью, поэтому, если важна поддержка старых браузеров, это не будет решением.

JSON не обеспечивает поддержку BigInt, поэтому числовые значения такого размера вполне могут округляться. Использование строки — самый надежный способ обеспечить правильную передачу этих данных.

Комментарии:

1. Кроме того, BigInt имеет несовершенную поддержку во всех браузерах.

2. @Pointy Internet Explorer фактически мертв, и здесь это было задержкой, так что это может быть не проблемой, но да, строки лучше.

3. Ну, моя компания по своей сути предназначена только для нас, и мы получаем удивительное количество посетителей IE11. редактировать возможно, «депрессивный» — лучшее слово

4. @Pointy В вашей стране все еще есть долларовые банкноты, пенни и магнитные карты, так что да, сочувствую вам.

5. Проблема заключалась в том, что на самом деле входное значение из angular formgroup вызывало эту проблему, и для ее репликации пришлось использовать json. Спасибо за ответ.