首页 > 解决方案 > 将大量数字组合成一个数字的问题

问题描述

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

[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)
});

标签: javascriptarrays

解决方案


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

在我看来,您可以选择以下之一:

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

  • 使用BigInt;BigInts 是 JavaScript 中一种新的数字原语,可以表示任意精度的整数。使用 BigInts,即使超出安全整数限制,您也可以安全地存储和操作大整数。不幸的是,它们目前仅适用于 Chrome。如果你想使用其他浏览器,你可以检查这个,如果你使用 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);

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

干杯!


推荐阅读