给出以下字符串数组:
["9", "3", "3", "3", "8", "5", "2", "7", "0", "2", "2", "2", "7", "9", "8", "7"]
我编写了这个简化代码,试图将数组转换为数字(不使用任何内置的解析器)。
d.reduce((res,n,idx)=>{
res *= 10;
res += n.charCodeAt(0) - 48;
console.log(res);
return res;
},0);
这是日志:
9
93
933
9333
93338
933385
9333852
93338527
933385270
9333852702
93338527022
933385270222
9333852702227
93338527022279
933385270222798
9333852702227988
933385270222798(8)< - 应为7
我注意到9333852702227980 + 7 = 9333852702227988
当数字很大时,代码就会出现,我猜我已经超出了安全的整数范围。我该如何解决这个问题?
答案 0 :(得分:0)
function convertArrayToNumber(arr) {
let result = ""
for (el of arr) {
result += el
}
return result
}
let yourArray = ["9", "3", "3", "3", "8", "5", "2", "7", "0", "2", "2", "2", "7", "9", "8", "7"]
Number(convertArrayToNumber(yourArray))
答案 1 :(得分:-1)
查看任意精度的整数算术包,例如Big Numbers,Big或Crunch。他们应该给你一些如何推销自己的想法。
答案 2 :(得分:-3)
var arr = ["9", "3", "3", "3", "8", "5", "2", "7", "0", "2", "2", "2", "7", "9", "8", "7"];
var num = 0;
for (a = arr.length - 1; a >= 0; a--) {
num += arr[a] * Math.pow(10, (arr.length - 1) - a);
}
Number.prototype.add = function(x) {
var out = 0;
for (a = arr.length - 1; a >= 0; a--) {
out += (arr[a] * 1 + (x[(arr.length - 1) - a] || 0) * 1) * Math.pow(10, (arr.length - 1) - a);
}
return out;
}
console.log(num);
console.log(num.add('7'));