Nodejs / Javascript 当每个数字超过15位时获取起始数字和结束数字之间的数字
Nodejs / Javascript get the numbers between a start number and end number when each number has more than 15 digits
我试图使用以下逻辑在 start_number 和 end_number 之间获取数字(iccid - 与 esim 相关的东西):
let { start_iccid, end_iccid } = req.value.body;
let list = [];
let lowEnd = parseInt(start_iccid); // sample value : 100000000000000000
let highEnd = parseInt(end_iccid); // sample value : 100000000000000029
for (let i = lowEnd; i <= highEnd; i++) {
list.push(i);
}
不出所料,我收到以下错误:
FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
1: node::Abort() [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
2: 0x8c21ec [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
3: v8::Utils::ReportOOMFailure(char const*, bool) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
5: v8::internal::Heap::AllocateUninitializedFixedDoubleArray(int, v8::internal::PretenureFlag) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
6: v8::internal::Factory::NewFixedDoubleArray(int, v8::internal::PretenureFlag) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
7: 0xd554b5 [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
8: v8::internal::Runtime_GrowArrayElements(int, v8::internal::Object**, v8::internal::Isolate*) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
9: 0x217d6df042fd
我了解到在Javascript中,所有数字都是IEEE双精度浮点数,这意味着我只有大约16位数字 的精度; 64 位的其余部分保留给指数。如果您需要所有 64 位,我必须使用一些技巧来获得更高的精度。
我尝试使用 big-number javascript 库,但无法使用 for
循环。
这个问题的最佳解决方案是什么?
我也尝试在阅读此线程后增加 nodejs memory limit
但无法解决问题:
注意:JavaScript中最大的安全整数是9007199254740991(253-1),而最小的安全整数是-9007199254740991。
ICCID(集成电路卡标识符)- SIM 卡包含其唯一序列号 (ICCID)。 ICCID 存储在 SIM 卡中,并在个性化过程中打印在 SIM 卡上。可以有 18 到 20 个数字
是的,您可以添加任意数量的数字。您可以在项目中安装 lodash 或包含外部 javascript.
import _ from "lodash";
let result = _.add(100000000000000000, 100000000000000029);
console.log(result);
您可以从这里参考文档add two numbers using lodash
根据您的问题,您想要获得 2 个大数字之间的所有数字。您可以使用 bignumber.js 库 https://www.npmjs.com/package/bignumber.js 。它处理与大数字相关的所有操作。
const BigNumber = require('bignumber.js');
let arr = [];
let x = new BigNumber("100000000000000000");
let y = "100000000000000029";
while (x.isLessThanOrEqualTo(y)) {
arr.push(x.toString());
x = x.plus(1);
}
for (let elem of arr) {
console.log(elem); //it contains all your elements
}
我试图使用以下逻辑在 start_number 和 end_number 之间获取数字(iccid - 与 esim 相关的东西):
let { start_iccid, end_iccid } = req.value.body;
let list = [];
let lowEnd = parseInt(start_iccid); // sample value : 100000000000000000
let highEnd = parseInt(end_iccid); // sample value : 100000000000000029
for (let i = lowEnd; i <= highEnd; i++) {
list.push(i);
}
不出所料,我收到以下错误:
FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
1: node::Abort() [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
2: 0x8c21ec [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
3: v8::Utils::ReportOOMFailure(char const*, bool) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
5: v8::internal::Heap::AllocateUninitializedFixedDoubleArray(int, v8::internal::PretenureFlag) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
6: v8::internal::Factory::NewFixedDoubleArray(int, v8::internal::PretenureFlag) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
7: 0xd554b5 [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
8: v8::internal::Runtime_GrowArrayElements(int, v8::internal::Object**, v8::internal::Isolate*) [/home/cavli/.nvm/versions/node/v8.11.4/bin/node]
9: 0x217d6df042fd
我了解到在Javascript中,所有数字都是IEEE双精度浮点数,这意味着我只有大约16位数字 的精度; 64 位的其余部分保留给指数。如果您需要所有 64 位,我必须使用一些技巧来获得更高的精度。
我尝试使用 big-number javascript 库,但无法使用 for
循环。
这个问题的最佳解决方案是什么?
我也尝试在阅读此线程后增加 nodejs memory limit
但无法解决问题:
注意:JavaScript中最大的安全整数是9007199254740991(253-1),而最小的安全整数是-9007199254740991。
ICCID(集成电路卡标识符)- SIM 卡包含其唯一序列号 (ICCID)。 ICCID 存储在 SIM 卡中,并在个性化过程中打印在 SIM 卡上。可以有 18 到 20 个数字
是的,您可以添加任意数量的数字。您可以在项目中安装 lodash 或包含外部 javascript.
import _ from "lodash";
let result = _.add(100000000000000000, 100000000000000029);
console.log(result);
您可以从这里参考文档add two numbers using lodash
根据您的问题,您想要获得 2 个大数字之间的所有数字。您可以使用 bignumber.js 库 https://www.npmjs.com/package/bignumber.js 。它处理与大数字相关的所有操作。
const BigNumber = require('bignumber.js');
let arr = [];
let x = new BigNumber("100000000000000000");
let y = "100000000000000029";
while (x.isLessThanOrEqualTo(y)) {
arr.push(x.toString());
x = x.plus(1);
}
for (let elem of arr) {
console.log(elem); //it contains all your elements
}