ParseInt сбросив цифры - PullRequest
1 голос
/ 25 марта 2020

Работал над проблемой кода leetcode, который хотел, чтобы я добавил значение в форму массива. ССЫЛКА НА ПРОБЛЕМУ

Это работает для всех примеров, ожидаемых в журнале консоли ниже. По какой-то причине parseInt отбрасывает последние две цифры (6,3) и заменяет их нулями.

Почему это так?

var addToArrayForm = function(A, K) {
  let number = A.join('');
  number = parseInt(number, 10);
  number += K;

  return number.toString().split('');
};

console.log(
  addToArrayForm(
    [1, 2, 6, 3, 0, 7, 1, 7, 1, 9, 7, 5, 6, 6, 4, 4, 6, 6, 6, 3],
    516
  )
);

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Это не parseInt, а способ JavaScript для хранения чисел, что является 64-битной плавающей точкой. Вам просто не хватает точности, чтобы сохранить эти последние цифры в таком формате. На самом деле это можно продемонстрировать на том самом числе, которое вы тестировали, просто отследив его до консоли (фрагмент ниже).

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

console.log("12630717197566446663");
console.log(12630717197566446663);
0 голосов
/ 25 марта 2020

Относится к нумерации c при разборе JS. Попробуйте использовать BigInt.

var addToArrayForm = function(A, K) {
  let number = A.join('');
  number = BigInt(number);
  number += BigInt(K);

  return number.toString().split('');
};
...