Почему последний элемент моего массива заменяется на 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 элемента из массива, он работает нормально. Спасибо за все отличные ответы!:)
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. Это все:)