在 [-2, 2] 之间生成随机 X.XXX 数字

Cla*_*ner 7 java

x = rd.nextInt((4000) - 2000) / 1000.0;
Run Code Online (Sandbox Code Playgroud)

这是在 [0, 2] 到十进制小数之间生成数字,这是我想要的,我只需要负数,所以生成的数字范围在 [-2, 2] 之间。

Boh*_*ian 5

您面临的问题是整数运算,它会截断结果的小数部分。rd.nextDouble()改为使用,因此算术结果为double,保留小数部分。

但是,要四舍五入到 1/100,您可以使用整数算术对您有利。

你的问题有十位小数的文字,所以这是解决方案:

x = (int)(((rd.nextDouble() * 4) - 2) * 100) / 100d;
Run Code Online (Sandbox Code Playgroud)

但是你的标题提到了X.XXX,所以这是解决方案:

x = (int)(((rd.nextDouble() * 4) - 2) * 1000) / 1000d;
Run Code Online (Sandbox Code Playgroud)

要解开这里发生的事情:

  1. 生成 0.000000 和 1.000000 之间的随机双精度值
  2. 乘以范围的比例,所以我们得到一个介于 0.000000 和 4.000000 之间的数字
  3. 减去 2,所以我们得到一个介于 -2.000000 和 2.000000 之间的数字
  4. 乘以 1000,所以我们得到一个介于 -2000.000000 和 2000.000000 之间的数字
  5. 强制转换为 int 以截断分数,因此我们得到一个介于 -2000 和 2000 之间的 int
  6. 除以 1000d(这是一个双精度数),所以我们得到了 -2.000 和 2.000 之间的双精度数