Cdr*_*lak 7 c# random probability
我已经通过多种方式看到了这个问题,但我只需要对我在这里做的事情进行健全检查.
基本上我想基于1到100之间生成的随机数使用以下方法触发概率为25%的事件:
int rand = random.Next(1,100);
以下是否会实现这一目标?
if (rand<=25)
{
    // Some event...
}
我以为我会使用1到100之间的数字,所以我可以稍后调整概率 - 例如通过使用调整为23%
if (rand<=23) {...}
谢谢参观.
您所犯的最大错误是应该random.Next(0,100)像文档中所述 
minValue:返回的随机数的包含下限.
maxValue:返回的随机数的独占上限.maxValue必须大于或等于minValue.
Emphisis mine,exclusive表示它不包含您传入的数字,因此我的代码生成范围0-99,您的代码生成范围1-99.
所以将代码更改为
int rand = random.Next(0,100)
if (rand < 25) //25%
{
    // Some event...
}
//other code
if (rand < 23) //23%
{
    // Some event...
}
从更改<=到<是因为您现在使用的是独占上限范围
第二个参数Next(int, int)是所需结果范围的排他上限.因此你应该使用这个:
if (random.Next(0, 100) < 25)
或者,如果您必须使用基于1的逻辑,
if (random.Next(1, 101) <= 25)
您也可以使用此代码(通常用于百分比计算,使用0到1之间的双倍):
double rand = random.NextDouble();
if(rand < .25)
{
...