Java:生成一个范围内的随机 double 值(包括范围的最小值和最大值)

标签 java

我需要生成一个介于 -0.10 和 0.25 之间的随机 double ,包括 -0.10 和 0.25。我还不完全理解 java 的随机数生成器,所以我不太确定如何执行此操作。我知道下面的代码会生成该范围内的数字,但我几乎 100% 确定它还不包括在内。我如何将其更改为包含范围的最小值和最大值?

public double randDouble() {
    //formula: (Math.random() * (max - min) + min
    //in this case, min = -0.10 and max = 0.25
    return (Math.random() * 0.35) - 0.10;
}

我的问题与@javaguy 正在谈论的问题不同,因为在该线程的任何地方都没有人说如何使两端都包含在内。我已经测试了这段代码,但没有看到 -.10 或 0.25 的输出,所以除非我的测试不够大,否则我看不出它是如何包含两端的。

最佳答案

由于您希望值介于 -0.10 和 0.25 之间(包括两者),我建议采用不同的方法来控制随机值的粒度。使用 Math.random() 将返回 0.0(含)和 1.0(不含)之间的值,因此使用您的方法永远不会获得 0.25 的值。而是使用 Random() 类并使用整数来包含两端。

Random randomValue = new Random();
int randomInt = randomValue.nextInt(3501) - 1000; //Will get integer values between -1000 and 2500
Double rangedValue = Double(randomInt)/10000.0 // Get values between -0.10 and 0.25 

或者,您可以通过增加传递给 randomValue.nextInt() 的值的大小并相应地更改最后一行中除以的值来增加小数位。

关于Java:生成一个范围内的随机 double 值(包括范围的最小值和最大值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43352043/

相关文章:

java - OnClickListener 未按预期工作

java - 为什么我无法在小程序中获取远程数据源?

java - 本地日期不一致

java - Android Jelly Bean 不支持 PullToRefreshListView

java - 使用 Java 的递归表达式求值器

java - 使用容器管理的实体bean时,容器何时将bean存储到数据库中?

java - 创建支持 UTF-8 的文件

java - 通过某个键将 <Long, List<String>> 映射到字符串 Lambda 列表

java - Jmockit 中的 Lambda 期望

java - 使用数据源的 jndi 查找进行 JUnit Servlet 测试