【发布时间】:2016-01-30 23:45:35
【问题描述】:
我想在区间 [0,1] 之间生成随机浮点数。生成的随机值将与来自文件的输入进行比较。文件的内容是一个概率(浮点值),因此它们在范围 [0,1] 内,它看起来像:
0.55
0.14
0.005
0.870
0.98
0
1
我正在阅读此文件并将概率值存储到 DoubleList 中。现在我想在 [0,1] 之间生成一个浮点随机数。如您所见,该文件的概率值最多为 1 位、2 位十进制和 3 位十进制。 我正在使用以下代码:
public static double randomNumberGenerator()
{
double rangeMin = 0.0f;
double rangeMax = 1.0f;
Random r = new Random();
double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
return(createdRanNum);
}
生成的随机浮点值也应该类似于概率值(就像文件中生成的最大十进制数字一样)。如何限制生成的十进制数字?
我检查了以下链接:Java random number between 0 and 0.06。人们建议生成 Int 数,然后进行 100 的双除。这是好方法吗?不能限制直接生成的小数吗?
PS:如果我将上述代码中随机生成的数字与 File 中的 double 值进行比较,DoubleList 中是否会出现一些内存下降问题?
【问题讨论】:
-
您需要更清楚地表达您的问题。我是否正确,您想在 (0,x) 范围内生成一个随机数,其中 x 是文件中的值?例如,对于第一个数字 0.55,您想要一个 (0,0.55) 范围内的随机数?
-
double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble();是您将获得的最佳解决方案。如果你的数字只是半随机的,就没有办法通过引入其他约束来欺骗你的出路,这可能会遵循更简单的逻辑,但会以更少的真实可变性为代价。 -
嗨,詹姆斯,感谢您的回答。不,我不想在文件的范围内生成数字。我想在区间[0,1](包括)内生成随机数,但我想将生成的随机数的数字限制为小数点后三位。目前我得到的输出如下:0.1899367620461322
-
Hii Law,感谢您的快速回答。我想通过使用 double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble(); 从生成的结果中只取 3 个小数。如何做到这一点?