在范围内生成随机双精度

swa*_*ati 128 java random

我有两个双打,如下所示

double min = 100;
double max = 101;
Run Code Online (Sandbox Code Playgroud)

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

Random r = new Random();
r.nextDouble();
Run Code Online (Sandbox Code Playgroud)

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

mob*_*mob 217

rangeMin和之间生成随机值rangeMax:

Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
Run Code Online (Sandbox Code Playgroud)

  • 这通常是正确的,但请注意其限制.如果你做`double rangeMax = Double.MAX_VALUE;`和`double rangeMin = -rangeMax;`你将总是获得一个无限值的回报.您可能想要检查`Double.valueOf(rangeMax-rangeMin).isInfinite()`. (19认同)
  • @K_7:举例来说,0.0 和 1.0 之间有 10,000 个不同的 double 值(实际上可能更多)。但如果“rangeMin”和“rangeMax”之间的范围很大,那么它们之间可能有 10,000,000 个不同的双精度值。`(rangeMax - rangeMin) * r.nextDouble()` 的结果将仅在这 10,000,000 个可能值中的 10,000 个之间进行选择。(我觉得这不是一个完美的解释,但也许有一点帮助......) (2认同)

Tun*_*aki 120

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

double random = ThreadLocalRandom.current().nextDouble(min, max);
Run Code Online (Sandbox Code Playgroud)

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

  • 电话需要api 21 (5认同)
  • @XarEAhmer什么是API 21? (2认同)
  • 看起来他指的是Android。 (2认同)

Top*_*era 37

用这个:

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

编辑:

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

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

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


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


小智 5

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.
     }
}
Run Code Online (Sandbox Code Playgroud)