ParseInt 丢弃数字

ParseInt dropping digits

正在研究一个 leetcode 问题,该问题要我向数组形式添加一个值。 LINK TO PROBLEM

它适用于除下面控制台日志中的示例之外的所有示例。由于某种原因,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
  )
);

这不是 parseInt,而是 JavaScript 存储数字的方式,即 64 位浮点数。您只是没有足够的精度以这种格式存储最后的数字。它实际上可以在您测试过的数字上证明,只需将其追踪到控制台(下面的片段)。

解决方法确实存在,例如,您可以使用 BigInt,但我真的不认为您的练习需要您深入研究这个。

console.log("12630717197566446663");
console.log(12630717197566446663);

JS中数值解析相关。尝试使用 BigInt。

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

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