将大量数字组合成一个数字的问题

时间:2019-01-03 09:06:03

标签: javascript arrays

我正在尝试将数字数组转换为一个数字,例如

[1,2,3] to 123. 

但是,我的代码无法处理大数组,因为它无法返回确切的数字。如

[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3] returns 6145390195186705000

有什么办法可以将我正确转换为一个数字,我将非常感谢您的帮助。

var integer = 0;
var digits = [1,2,3,4]
//combine array of digits into int
digits.forEach((num,index,self) => {
    integer += num * Math.pow(10,self.length-index-1)
});

3 个答案:

答案 0 :(得分:3)

javacript可以容纳的最大整数值为 +/- 9007199254740991 。请注意,按位运算符和移位运算符对32位整数进行运算,因此在这种情况下,最大安全整数为2^31-1或2147483647。

我认为,您可以选择以下选项之一:

  • 将数字存储为字符串并将其作为数字进行处理;您可能必须实现特殊功能以对它们进行加/减/乘/除(这是经典的算法问题)

  • 使用BigInt; BigInts是JavaScript中的新数字原语,可以表示任意精度的整数。使用BigInts,您可以安全地存储和操作大整数,甚至可以超出安全整数限制。不幸的是,它们现在只能与Chrome一起使用。如果要使用其他浏览器,则可能要检查this甚至是this(如果要使用angularjs或nodejs)。

在Chrome的控制台中尝试以下代码:

let x = BigInt([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3].join(''));
console.log(x);

这将打印6145390195186705543nn后缀表示它是一个大整数。

干杯!

答案 1 :(得分:2)

您可以使用JavaScript Array join()方法并将其解析为整数。 例: parseInt([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5] .join('')) 结果: 6145390195186705

编辑:使用BigInt代替parseInt,但是它仅在chrome浏览器上有效。

答案 2 :(得分:1)

Javascript中可能的最大数字是 +/- 9007199254740991

使用BigInt。以string的形式连接所有数字,并将其传递到BigInt全局函数中,以将其转换为int

var integer = 0;
var digits = [1,2,3,4]
//combine array of digits into int
digits.forEach((num,index,self) => {
    integer += num;
});
integer= BigInt(integer);

注意:到目前为止,仅适用于Chrome。您可以使用诸如 BigInteger.js MathJS

之类的其他软件