在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

回到顶部