あなたは小数点以下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()
を呼び出すと予想される結果が得られるほど小さくなります。
可能性のある複製http://stackoverflow.com/questions/50532/how-do-i-format-a-number-in-java、私は個人的にDecimalFormatを保証することができます –
あなたがしようとしていることを明確にすることはできますか?より大きな乱数を作りようとしていますか? – ostrichofevil
正確な小数点以下の桁数を気にするならば、 'double'sの代わりに' BigDecimal'を使うべきです。 –