2016-03-28 8 views
0

乱数で配列を塗りつぶす必要がありますが、数字は10位にしかなりません。 Math.randomでそれをする方法はありますか?ここで私は私のMath.randomのために持っているものです。Math.randomで数を10位にする

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; 
+0

可能性のある複製http://stackoverflow.com/questions/50532/how-do-i-format-a-number-in-java、私は個人的にDecimalFormatを保証することができます –

+0

あなたがしようとしていることを明確にすることはできますか?より大きな乱数を作りようとしていますか? – ostrichofevil

+0

正確な小数点以下の桁数を気にするならば、 'double'sの代わりに' BigDecimal'を使うべきです。 –

答えて

1

あなたは小数点以下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 haエラーが表示されないように、その表現を持つ最短小数点を表示するようにDouble.toString()が書かれています(小数点以下1桁につき少なくとも100兆もの数値になりません)

注2:これは、累積エラーを避けるため、(x * N)/(double) Nを実行する必要がある理由です。例えばあなたは

double y = x * 0.1 

double y = x/10.0; 

をすれば、これは常に同じ結果を生成しません。これは、0.1を正確に表現することができず、操作で使用するときにこのエラーが複合化されるためです。 10.0を使用すると、エラーなしで表すことができるので、結果の誤差は、Double.toString()を呼び出すと予想される結果が得られるほど小さくなります。

+0

ありがとう! –