【发布时间】:2020-08-10 11:26:56
【问题描述】:
x = rd.nextInt((4000) - 2000) / 1000.0;
这是在 [0, 2] 到千位小数之间生成数字,这是我想要的,我只需要负数,因此生成的数字范围在 [-2, 2] 之间。
【问题讨论】:
标签: java
x = rd.nextInt((4000) - 2000) / 1000.0;
这是在 [0, 2] 到千位小数之间生成数字,这是我想要的,我只需要负数,因此生成的数字范围在 [-2, 2] 之间。
【问题讨论】:
标签: java
您可以在 [0,4] 范围内生成随机数,然后简单地从结果中减去 2:
x = (rd.nextInt(4000) / 1000.0) - 2;
【讨论】:
浮点数并不总是有精确的位数。此外,小数点后第三位称为千分位(小数点后的百分之一是. 之后的第二个数字)。我想你知道这一点,因为你除以一千。所以,第一步:在0 和4 之间生成一个随机值作为double。第二步:减二并转换为格式化的String(这样就可以控制位数了)。
double d = (rd.nextDouble() * 4) - 2;
String x = String.format("%.3f", d);
【讨论】:
您可以生成一个随机浮点数,然后使用模数将其截断到小数点后百位。
int min = -2;
int max = 2;
Random rand = new Random();
float ret = rand.nextFloat() * (max - min) + min;
return ret - (ret % 0.01);
【讨论】:
您面临的问题是整数运算,它会截断结果的小数部分。改用rd.nextDouble(),这样算术结果就是double,它保留了小数部分。
但是,要四舍五入到 1/100,您可以使用整数算术来发挥自己的优势。
您的问题的文本到小数点后的百分之一,所以这是解决方案:
x = (int)(((rd.nextDouble() * 4) - 2) * 100) / 100d;
但是你的标题提到了X.XXX,所以这是解决方案:
x = (int)(((rd.nextDouble() * 4) - 2) * 1000) / 1000d;
解开这里发生的事情:
【讨论】: