关于java:在范围内生成随机双精度数

Generate a random double in a range

我有两个双打,如下所示

1
2
double min = 100;
double max = 101;

并且使用随机生成器,我需要在min和max的范围之间创建一个double值。

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

但这里没有任何东西我们可以指定范围。


要生成rangeMinrangeMax之间的随机值:

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


这个问题是在Java 7发布之前提出的,但是现在,还有另一种使用Java 7(及以上)API的方法:

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

nextDouble将返回最小值(包括)和最大值(不包括)之间的伪随机双精度值。 边界不一定是int,并且可以是double


用这个:

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

编辑:

new Random().nextDouble():随机生成0到1之间的数字。

start:开始编号,将数字"向右移"

end - start:间隔。 Random给出了这个数字的0%到100%,因为random给出了一个从0到1的数字。

编辑2:
Tks @daniel和@aaa bbb。 我的第一个答案是错的。


1
2
3
4
5
6
7
8
9
10
11
12
13
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.
         }
    }

1
2
3
4
5
Random random = new Random();
double percent = 10.0; //10.0%
if (random.nextDouble() * 100D < percent) {
    //do
}