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

Posted

技术标签:

【中文标题】生成 [-2, 2] 之间的随机 X.XXX 数字【英文标题】:Generate Random X.XXX numbers between [-2, 2] 【发布时间】:2020-08-10 11:26:56 【问题描述】:
x = rd.nextInt((4000) - 2000) / 1000.0;

这是在 [0, 2] 到千位小数之间生成数字,这是我想要的,我只需要负数,因此生成的数字范围在 [-2, 2] 之间。

【问题讨论】:

【参考方案1】:

您可以在 [0,4] 范围内生成随机数,然后简单地从结果中减去 2:

x = (rd.nextInt(4000) / 1000.0) - 2;

【讨论】:

出了什么问题:x = rd.nextInt(4000) / 1000.0 - 2; @TomDeConinck 抱歉,我没有给予足够的关注,只是把原来的帖子翻了一番。感谢您指出。【参考方案2】:

浮点数并不总是有精确的位数。此外,小数点后第三位称为千分位(小数点后的百分之一是. 之后的第二个数字)。我想你知道这一点,因为你除以一千。所以,第一步:在04 之间生成一个随机值作为double。第二步:减二并转换为格式化的String(这样就可以控制位数了)。

double d = (rd.nextDouble() * 4) - 2;
String x = String.format("%.3f", d);

【讨论】:

【参考方案3】:

您可以生成一个随机浮点数,然后使用模数将其截断到小数点后百位。

int min = -2;
int max = 2;
Random rand = new Random();
float ret = rand.nextFloat() * (max - min) + min;
return ret - (ret % 0.01);

【讨论】:

【参考方案4】:

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

但是,要四舍五入到 1/100,您可以使用整数算术来发挥自己的优势。

您的问题的文本到小数点后的百分之一,所以这是解决方案:

x = (int)(((rd.nextDouble() * 4) - 2) * 100) / 100d;

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

x = (int)(((rd.nextDouble() * 4) - 2) * 1000) / 1000d;

解开这里发生的事情:

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

【讨论】:

以上是关于生成 [-2, 2] 之间的随机 X.XXX 数字的主要内容,如果未能解决你的问题,请参考以下文章

范围之间的随机奇数,C中的单个数字除外

随机生成【1,100】之间的10个整数存放在数组中。

如何在excel中生成一个在一定范围内的随机数

随机取2个范围(例如100和150)之间的30个数字(浮点数),总计为N

java 从0-16这17个数字中随机取出100个数,要求其中数字2出现4次,数字5出现7次,数字7出现5次,其他任意

java如何生成随机的1-3数字