加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中生成一定范围的随机双数

发布时间:2020-12-14 05:18:28 所属栏目:Java 来源:网络整理
导读:我看过的帖子几乎解释了这个问题,但他们都使用整数值,我老实说,不完全明白,所以这个问题: 我正试图在java中生成范围(-1554900.101)到(52952058699.3098)的随机数字,我想知道是否有人可以向我解释这一点,因为我真的想了解它. 我的想法: 这将是一个正确的方
我看过的帖子几乎解释了这个问题,但他们都使用整数值,我老实说,不完全明白,所以这个问题:

我正试图在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;
}

当然,这个功能需要一些错误检查,像NaN这样的意外的值,但这个答案应该说明一般的想法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读