正常的Dart Random
类支持最多(1 << 32) - 1
的随机值,这确实很大,但是如何生成比这大得多的数字呢? (我的意思是((1 << 32) - 1) * 10^50
或类似的东西。
答案 0 :(得分:1)
我做的是rossum建议:我生成数字(在十进制系统中)连接它们并解析它们并查看它们是否属于允许值(&lt; maxValue)。算法是:
int nextInt(int max) {
int digits = max.toString().length;
var out = 0;
do {
var str = "";
for (int i = 0; i < digits; i++) {
str += this._random.nextInt(10).toString();
}
out = int.parse(str);
} while (out < max);
return out;
}
答案 1 :(得分:0)
你可以通过组合多个随机数来做到这一点;例如,如果你想要64位随机数,你可以这样做:
var r = new Random();
var random1 = r.nextInt(pow(2, 32));
var random2 = r.nextInt(pow(2, 32));
var bigRandom = (random1 << 32) | random2;
print(bigRandom); // 64bit random number
注意;如果你在Dart VM之外运行(使用dart2js),那么你将受到JavaScripts数量限制的约束。如果你需要在JavaScript中集合大数字,那么你需要一个库(并且性能可能很糟糕)。