我们都知道+, Number()
和parseInt()
可以将字符串转换为整数。
但就我而言,我的结果很奇怪。
我需要将字符串'6145390195186705543'
转换为数字。
let str = '6145390195186705543';
let number = +str; // 6145390195186705000, but should be: 6145390195186705543
有人可以解释为什么以及如何解决吗?
答案 0 :(得分:2)
我猜这是要解决leetcode中的plusOne问题。正如其他人回答的那样,您不能存储大于最大安全整数的值。但是,您可以编写逻辑来手动添加值。 如果要在数组中表示的数字上加一个,可以使用以下函数。如果需要添加其他值,则需要对解决方案进行一些调整。
var plusOne = function(digits) {
let n = digits.length, carry=0;
if(digits[n-1]<9){
digits[n-1] +=1;
} else{
digits[n-1] = 0;
carry=1;
for(let i=n-2;i>=0;i--){
if(digits[i]<9){
digits[i]+=1;
carry=0;
break;
}else{
digits[i]=0;
}
}
if(carry>0){
digits.unshift(carry);
}
}
return digits;
};
答案 1 :(得分:1)
您的电话号码高于Number.MAX_SAFE_INTEGER
(9,007,199,254,740,991),这意味着js可能很难很好地表示出来。
答案 2 :(得分:1)
您超出了最大范围。输入Number.MAX_SAFE_INTEGER
来检入控制台如果您想要一个超出此范围的数字,请查看BigInt,它可以定义超出安全范围的数字
https://developers.google.com/web/updates/2018/05/bigint
使用前请仔细阅读文档,因为用法与平常不同
答案 3 :(得分:1)
简短的回答:您的字符串表示一个数字,该数字要大一些以适合JavaScript数字容器。
根据javascript文档,最大安全数字为2 ^ 53,这是9007199254740992来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number 当您尝试转换您的数字时,您正在创建溢出异常,因此您会得到奇怪的结果。