生成范围内的随机双精度浮点数

我有两个像下面这样的替身

double min = 100;
double max = 101;

使用随机生成器,我需要在最小值和最大值之间创建一个双精度值。

Random r = new Random();
r.nextDouble();

但是这里没有我们可以指定范围的地方。

387848 次浏览

生成 rangeMinrangeMax之间的随机值:

Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();

用这个:

double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);

编辑:

随机生成一个介于0和1之间的数字。

start: 开始数字,将数字“向右”移动

间隔。Random 给出了这个数字的0% 到100% ,因为 Random 给出了一个0到1的数字。


编辑2: 我的第一个回答是错误的。

这个问题在 Java7发布之前就已经有人问过了,但是现在,使用 Java7(及以上) API 还有另一种可能的方法:

double random = ThreadLocalRandom.current().nextDouble(min, max);

nextDouble 将返回一个介于最小值(包含)和最大值(独占)之间的伪随机双精度值。边界不一定是 int,可以是 double

import java.util.Random;


public class MyClass {
public static void main(String args[]) {
Double min = 0.0;  // Set To Your Desired Min Value
Double max = 10.0; // Set To Your Desired Max Value
double x = (Math.random() * ((max - min) + 1)) + min;   // This Will Create A Random Number Inbetween Your Min And Max.
double xrounded = Math.round(x * 100.0) / 100.0;   // Creates Answer To The Nearest 100 th, You Can Modify This To Change How It Rounds.
System.out.println(xrounded);    // This Will Now Print Out The Rounded, Random Number.
}
}
Random random = new Random();
double percent = 10.0; //10.0%
if (random.nextDouble() * 100D < percent) {
//do
}

随机的主要思想是它返回一个伪随机值。 没有完全随机的函数,因此,使用相同种子的2个随机实例在某些条件下将返回相同的值。

首先查看函数 doc 以便理解它是一个很好的实践 (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html)

现在我们了解到函数 nextDouble ()的返回值是介于0.0和1.0之间的伪随机值,我们可以利用它。

为了在 A 和 B 之间创建一个随机数,假设边界是有效的(A > B) ,我们需要: 1. 找出 A 和 B 之间的范围,这样我们就可以知道我们有多少“步骤”。 2.使用随机函数来确定要执行多少步骤(因为返回值介于0.0和1.0之间,所以可以认为它是“选择一个随机百分比的增加”) 3. 加上偏移量

在经历了这一切之后,你可以看到,在我看来,暴徒给了你最简单和最常见的方式来做到这一点

Double Random Value = rangeMin + (rangeMax-rangeMin) * r.nextDouble () ;

Double 随机值 = 偏移量 + (范围) * (0.0-1.0之间的随机值)

霍普,这可能是最好的帮助: Java 中的随机数生成器


分享一个完整的计划:

import java.util.Random;


public class SecondSplitExample
{
public static void main(String []arguments)
{
int minValue = 20, maxValue=20000;
Random theRandom = new Random();
double theRandomValue = 0.0;
        

// Checking for a valid range-
if( Double.valueOf(maxValue - minValue).isInfinite() == false )
theRandomValue = minValue + (maxValue - minValue) * theRandom.nextDouble();
        

System.out.println("Double Random Number between ("+ minValue +","+ maxValue +") = "+ theRandomValue);
}
}

下面是3次运行的结果:

Code>java SecondSplitExample
Double Random Number between (20,20000) = 2808.2426532469476


Code>java SecondSplitExample
Double Random Number between (20,20000) = 1929.557668284786


Code>java SecondSplitExample
Double Random Number between (20,20000) = 13254.575289900251

了解更多: