为什么我的数组的最后一个元素被替换为 0

Why is the last element of my array being replaced with a 0

我有一个函数:

function splitToDigits(n) {
    var digits = ("" + n).split("").map(function(item) {
        return parseInt(item, 10);
    });
    console.log(digits);
}

console.log(splitToDigits(123456784987654321));

这是返回 digits = [1,2,3,4,5,6,7,8,4,9,8,7,6,5,4,3,2,0]

知道为什么最后一个元素是 0 吗?我注意到当我从数组中删除 2 个元素时它正常运行。感谢所有伟大的答案! :)

正如上面评论部分中提到的 Jaromanda X,JavaScript 没有足够的精度来跟踪您传递给函数的整数中的每个数字。

要解决此问题,您应该传递一个字符串:

console.log(splitToDigits('123456784987654321'))

不过,我还想指出,您可以大大简化您的 splitToDigits 方法:

function splitToDigits(n) {
  return [].map.call(n + '', Number)
}

console.log(splitToDigits('123456784987654321'))
console.log(splitToDigits(1234))

因为Javascript截断了数字

查看此内容的最佳方法是执行此操作 console.log:

function splitToDigits(n) {
console.log(n);
var digits = ("" + n).split("").map(function(item) {
    return parseInt(item, 10);
});
}

那么,当你运行: splitToDigits(123456784987654321)时,你已经得到了123456784987654320。所以,它与你的代码无关,因为你还没有处理它。

如果您添加数字,它将变为科学记数法:

splitToDigits(1234567849876543211521521251) // turns to 1.2345678498765432e+27

这是一个 Javascript 精度问题。就这样:)