我看过的帖子几乎解释了这个问题,但他们都使用整数值,我老实说,不完全明白,所以这个问题:
我正试图在java中生成范围(-1554900.101)到(52952058699.3098)的随机数字,我想知道是否有人可以向我解释这一点,因为我真的想了解它.
我的想法:
这将是一个正确的方法吗?
1)在指定范围内生成一个随机整数
2)将生成的数字除以pi,得到浮点数/双随机结果
提前致谢.
解决方法
这是这个想法.您想要一个范围内的随机数,我们假设[-1.1,2.2]从一个简单的例子开始.该范围的长度为3.3,因为2.2 – (-1.1)= 3.3.现在大多数“随机”函数返回一个范围[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; }