如何将一个长字符串(超过16位)转换为数字



这是一个函数,只需在数组中增加一个数字但当我把很多数字放入数组(超过16位(时,我会遇到问题当我使用parseInt()时,只返回了16个正确的数字,超过这个数字的为零

6145390195186705000

和预期

6145390195186705543

功能

var plusOne = function(digits) {
var numbersInString = digits.join('');
var theNumbers = parseInt(numbersInString);
var theNumbersPlusOne = theNumbers + 1;
var result = String(theNumbersPlusOne).split("").map((theNumbersPlusOne) => {
return Number(theNumbersPlusOne);
});
return result;
};
console.log(plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]));

只是用另一个解决方案扩展我的上述评论。。。

您已经超过了最大安全整数值。(Number.MAX_SAFE_INTEGER,等于9007199254740991(。javascript中的标准整数类型不支持大于此值的数字,或者没有足够的精度来表示它们。任何大于这个的数字都用科学记数法表示,多余的数字会被截断,只表示为零。

话虽如此,你甚至不需要将数组转换为字符串或整数来增加它;携带1";可以这么说。

var plusOne = function(digits) {
for(let i = digits.length - 1; i > -1; i--)
{
if(digits[i] == 9)
{
digits[i] = 0;
if(i == 0)
digits = [1].concat(digits);
}
else
{
digits[i]++;
break;
}
}
return digits;
};
console.log(plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]));

您可以使用BigInt来处理这个问题。

var plusOne = function(digits) {
var numbersInString = digits.join('');
var theNumbers = BigInt(numbersInString);
var theNumbersPlusOne = theNumbers + BigInt(1);
var result = theNumbersPlusOne.toString().split("").map((theNumbersPlusOne) => {
return Number(theNumbersPlusOne);
});
return result;
};
console.log(plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]));

相关内容

  • 没有找到相关文章

最新更新