c#概率和随机数

时间:2012-04-09 21:10:07

标签: c# random probability

我已经通过多种方式看到了这个问题,但我只需要对我在这里做的事情进行健全检查。

基本上我想根据1到100之间产生的随机数使用以下方法触发概率为25%的事件:

int rand = random.Next(1,100);

以下是否会实现这一目标?

if (rand<=25)
{
    // Some event...
}

我以为我会使用1到100之间的数字,所以我可以稍后调整概率 - 例如使用

调整为23%
if (rand<=23) {...}

谢谢你看看。

3 个答案:

答案 0 :(得分:8)

您所犯的最大错误是random.Next(0,100)

应该是int rand = random.Next(0,100) if (rand < 25) //25% { // Some event... } //other code if (rand < 23) //23% { // Some event... }
  

minValue:返回的随机数的包含下限。

     

maxValue:返回的随机数的独占上限。 maxValue必须大于或等于minValue。

Emphisis mine,独有意味着它不包含您传入的数字,因此我的代码生成范围0-99,您的代码生成范围1-99。

所以将代码更改为

<=

<到{{1}}的更改是因为您现在使用的是独占上限范围

答案 1 :(得分:5)

Next(int, int)的第二个参数是所需结果范围的exclusive upper bound。因此,您应该使用此:

if (random.Next(0, 100) < 25)

或者,如果必须使用基于1的逻辑,

if (random.Next(1, 101) <= 25)

答案 2 :(得分:5)

您也可以使用此代码(通常用于百分比计算,使用0到1之间的双倍):

double rand = random.NextDouble();
if(rand < .25)
{
...