使用Math.random创建一个数字到十分位数

时间:2016-03-28 15:29:52

标签: java arrays

我需要用随机数填充数组,但数字只能到十分位数。有没有办法用Math.random做到这一点?以下是我对Math.random

的看法
double[] array = new double[size];
for (int i = 0; i < array.length; i++) {
    double num = ((Math.random() * 10000.0) + 0.0);
    array[i] = num;
}
return array;

1 个答案:

答案 0 :(得分:1)

如果你想要一个小数位的随机数,你可以使用

int size = 20;
double[] array = new double[size];
Random rand = new Random();
for (int i = 0; i < size; i++)
    array[i] = rand.nextInt(10_000 * 10) / 10.0;
System.out.println(Arrays.toString(array));

打印

[8773.3,6305.2,2758.4,7872.7,4648.9,3565.2,9546.4,7533.1,2369.7,3218.0,9960.2,7418.0,8149.3,8813.4,638.5,8178.9,2831.2,4758.7,8238.2,6409.1]

注意:虽然double有一个表示错误,但是Double.toString()被写入以显示最小的十进制数,这将具有该表示,因此您不会看到任何错误(也不会为一位小数至少高达100万亿)

注2:这就是为什么你必须做(x * N) / (double) N因为它避免累积错误。例如如果你这样做

double y = x * 0.1

double y = x / 10.0;

这并不总是产生相同的结果。这是因为0.1无法准确表示,并且在操作中使用它时,会复合此错误。如果您使用10.0,则可以毫无错误地表示它,因此结果中的错误将足够小,以至于当您致电Double.toString()时,您将获得预期结果。