Java Random()四舍五入

时间:2017-10-18 08:16:44

标签: java random

我使用Java随机生成随机数:1.0,1.1 - 10

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);

2 个答案:

答案 0 :(得分:1)

要生成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)过于圆润你的结果

答案 1 :(得分:1)

这个前提

  

很可能是因为0.95-0.99和10.01-10.04不是   生成。

错了。您生成从10到100(包括10和100)的随机整数。较低的分数和值的舍入不会发挥作用。随机nextInt在区间内是随机的;最终案件没有受到歧视。

我认为你的方法

Random random = new Random();
return (double) ((random.nextInt(91) + 10) / 10.0);

看起来正确。我建议你测量一下你正在经历的异常,也许这只是你在看输出时的偏见。

这是一些测量91值的实际随机生成的代码。它是在转换为double之前,这是不理想的。(但是我没有看到除以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的值似乎与其他值一样频繁出现。

相关问题