【问题标题】:Generate float Random number between [0,1] and restricting decimal [duplicate]在 [0,1] 和限制小数之间生成浮点随机数 [重复]
【发布时间】:2016-01-30 23:45:35
【问题描述】:

我想在区间 [0,1] 之间生成随机浮点数。生成的随机值将与来自文件的输入进行比较。文件的内容是一个概率(浮点值),因此它们在范围 [0,1] 内,它看起来像:

0.55

0.14

0.005

0.870

0.98

0

1

我正在阅读此文件并将概率值存储到 DoubleList 中。现在我想在 [0,1] 之间生成一个浮点随机数。如您所见,该文件的概率值最多为 1 位、2 位十进制和 3 位十进制。 我正在使用以下代码:

public static double randomNumberGenerator()
{
    double rangeMin = 0.0f;
    double rangeMax = 1.0f;
    Random r = new Random();
    double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
    return(createdRanNum);
}

生成的随机浮点值也应该类似于概率值(就像文件中生成的最大十进制数字一样)。如何限制生成的十进制数字?

我检查了以下链接:Java random number between 0 and 0.06。人们建议生成 Int 数,然后进行 100 的双除。这是好方法吗?不能限制直接生成的小数吗?

PS:如果我将上述代码中随机生成的数字与 File 中的 double 值进行比较,DoubleList 中是否会出现一些内存下降问题?

【问题讨论】:

  • 您需要更清楚地表达您的问题。我是否正确,您想在 (0,x) 范围内生成一个随机数,其中 x 是文件中的值?例如,对于第一个数字 0.55,您想要一个 (0,0.55) 范围内的随机数?
  • double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble(); 是您将获得的最佳解决方案。如果你的数字只是半随机的,就没有办法通过引入其他约束来欺骗你的出路,这可能会遵循更简单的逻辑,但会以更少的真实可变性为代价。
  • 嗨,詹姆斯,感谢您的回答。不,我不想在文件的范围内生成数字。我想在区间[0,1](包括)内生成随机数,但我想将生成的随机数的数字限制为小数点后三位。目前我得到的输出如下:0.1899367620461322
  • Hii Law,感谢您的快速回答。我想通过使用 double createdRanNum = rangeMin + (rangeMax - rangeMin) * r.nextDouble(); 从生成的结果中只取 3 个小数。如何做到这一点?

标签: java list random double


【解决方案1】:

你可以只使用 Java Random 类:

Random rand = new Random();
float f = rand.nextFloat()

返回介于 0.0f(含)和 1.0f(不含)之间的随机浮点数。

要对nextFloat() 的结果进行四舍五入,您可以使用如下辅助方法:

public static float round(float d, int decimalPlace) {
    BigDecimal bd = new BigDecimal(Float.toString(d));
    bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
    return bd.floatValue();
}

【讨论】:

  • 这就是我想先回答的问题,但是 OP 似乎需要截断小数。
  • @Mena 这样他就可以截断随机下一个浮点数的结果,我认为这是正确的方法。
  • 非常感谢。阿勒鲁特。我想截断从双随机生成的结果。怎么做?我不想用地板功能四舍五入..
  • @Shubhamagarwal 我在答案中添加了一个圆形示例方法
  • 亲爱的 Aleroot 感谢您推荐的方法。我用它来生成一个文件,但我仍然看到一些元素在小数点后仍然有一个位置。即使它将 decimalPlace 的参数设置为 3。
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2020-04-09
  • 2013-12-19
  • 2011-07-07
  • 2014-03-31
  • 2010-10-15
相关资源
最近更新 更多