我需要用随机数填充一个数组,但数字只能放在十分之一的地方。有没有一种方法可以用数学来做到这一点?这是我为我的孩子准备的 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;
mbskvtky1#
如果你想要一个小数位的随机数,你可以用
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]注:while double 如果出现表示错误,则写入double.tostring()以显示具有该表示形式的最短小数点,这样您就不会看到任何错误(对于一个小数点位,您也不会看到至少100万亿的数字)注2:这就是为什么你必须 (x * N) / (double) N 因为它可以避免累积的错误。e、 如果你这样做了
double
(x * N) / (double) N
double y = x * 0.1
和
double y = x / 10.0;
这并不总是产生相同的结果。这是因为 0.1 不能准确地表示,当您在操作中使用它时,会造成此错误。如果你使用 10.0 ,它可以无错误地表示,因此结果中的错误将足够小,以便在调用 Double.toString() 你会得到预期的结果。
0.1
10.0
Double.toString()
1条答案
按热度按时间mbskvtky1#
如果你想要一个小数位的随机数,你可以用
印刷品
[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]
注:while
double
如果出现表示错误,则写入double.tostring()以显示具有该表示形式的最短小数点,这样您就不会看到任何错误(对于一个小数点位,您也不会看到至少100万亿的数字)注2:这就是为什么你必须
(x * N) / (double) N
因为它可以避免累积的错误。e、 如果你这样做了和
这并不总是产生相同的结果。这是因为
0.1
不能准确地表示,当您在操作中使用它时,会造成此错误。如果你使用10.0
,它可以无错误地表示,因此结果中的错误将足够小,以便在调用Double.toString()
你会得到预期的结果。