在Java中生成某个范围内的随机双数
我看过很多文章,解释了这个问题,但是他们都使用整数值,老实说,我并没有完全理解它,所以这个问题:
我正在尝试在Java中生成从(-1554900.101)到(52952058699.3098)范围的随机数,我想知道是否有人可以向我解释这一点,因为我真的很想理解它。
我的想法:这是正确的方法吗?1)生成一个在我指定范围内的随机整数2)将生成的数除以pi以得到float / double随机结果
提前致谢。
回答:
这是主意。你想在一个随机数 的范围 ,比方说[-1.1,2.2]
,开始用一个简单的例子。自以来,该范围的长度为3.3 2.2 - (-1.1) =
3.3。现在,大多数“随机”函数都返回范围为1的数字([0,1)
长度为1),因此我们必须将随机数 缩放 到所需的范围。
Random random = new Random();double rand = random.nextDouble();
double scaled = rand * 3.3;
现在我们的随机数具有我们想要的大小,但是我们必须在数字行中将其移动到我们想要的精确值之间。对于这一步,我们只需要将整个范围的下限添加到缩放后的随机数中就可以了!
double shifted = scaled + (-1.1);
现在,我们可以将这些部分放到一个函数中:
protected static Random random = new Random();public static double randomInRange(double min, double max) {
double range = max - min;
double scaled = random.nextDouble() * range;
double shifted = scaled + min;
return shifted; // == (rand.nextDouble() * (max-min)) + min;
}
当然,此功能需要对意外值进行一些错误检查,例如,NaN
但是此答案应能说明总体思路。
以上是 在Java中生成某个范围内的随机双数 的全部内容, 来源链接: utcz.com/qa/416499.html