Java的随机()四舍五入
问题描述:
我使用Java的随机生成随机数:1.0,1.1 - 10Java的随机()四舍五入
Random random = new Random();
return (double) ((random.nextInt(91) + 10)/10.0);
当我打印了很多,这些数字(2000年),我注意到了1.0和10显着少于所有其他印刷品(重复20次,每次都发生)。很可能是因为0.95-0.99和10.01-10.04没有生成。
现在我已经阅读了很多关于这个线程,但它仍然让我对以下问题:
如果这些数字将代表例如等级,你不能得到比1和高于低这里是10,将范围从0.95扩大到10.04是否合法?
Random random = new Random();
return Double.valueOf((1005-95)/100);
答
要产生1.1和10使用之间的随机值下面的代码:
double min = 1.1d;
double max = 10d;
Random r = new Random();
double value = min + (max - min) * r.nextDouble();
Afterwarsds可以使用Math.floor(value)
太圆你的结果
答
这个前提
最可能是因为0.95-0.99和10.01-10.04不是 生成的。
是错误的。您生成从10到100的随机整数。较低的分数和四舍五入的值不会影响它。随机nextInt在区间中是随机的;最终案件不受歧视。
我觉得
Random random = new Random();
return (double) ((random.nextInt(91) + 10)/10.0);
你的方法看起来是正确的。我会建议测量你正在经历的异常情况,也许这是当你仅仅看着输出时的一种人为偏差。
下面是一些测量91个值的实际随机生成的代码。这是在转换为双倍之前,这是不理想的(但我不知道除以10除以10 - > 1.0,11 - > 1.1 ... 99 - > 9.9和100 - > 10.0 。最终结果的量度当然将是更期望的)
Random random = new Random();
int[] measure = new int[101];
for (int i = 0; i < 10000; i++) {
int number = (random.nextInt(91) + 10);
measure[number]++;
}
for (int i = 0; i < 101; i++) {
System.out.println(i + " count: " + measure[i]);
}
看从代码的结果的10个100个值似乎上来如经常任何其他。
你生成了多少个数字? – osanger
对不起,我生成了2000个数字,并重复了至少20次。这就是为什么我注意到 – RichardB
,你想生成1.1和10之间的数字? – osanger