如何在C#中生成一个随机数字?

我想生成一个2值之间的随机浮点数。 什么是在C#中做到这一点的最好方法?

我唯一加在Eric的回答上的是一个解释。 我觉得为什么代码工作的知识比知道代码的工作更好。

解释是这样的:假设你想要一个介于2.5和4.5之间的数字。 范围是2.0(4.5 – 2.5)。 NextDouble只返回一个介于0和1.0之间的数字,但是如果你乘以这个范围,你将得到一个介于0和范围之间的数字。

所以,这会给我们0.0到2.0之间的随机双打:

  rng.NextDouble()* 2.0 

但是,我们希望他们在2.5到4.5之间! 我们如何做到这一点? 添加最小的数字,2.5:

  2.5 + rng.NextDouble()* 2.0 

现在,我们得到0.0到2.0之间的数字; 如果你为这些值加上2.5,我们就会看到范围在2.5到4.5之间。

起初,我认为它是重要的,如果b> a或a> b,但是如果你解决这两种方式,你会发现它的工作方式相同,只要你不搞乱使用的variables的顺序。 我喜欢用更长的variables名来expression,所以我不会混淆:

  double NextDouble(Random rng,double min,double max)
 {
     return min +(rng.NextDouble()*(max  -  min));
 } 
 System.Random r = new System.Random(); double rnd( double a, double b ) { return a + r.NextDouble()*(ba); } 
 // generate a random number starting with 5 and less than 15 Random r = new Random(); int num = r.Next(5, 15); 

对于双打你可以用NextDoublereplaceNext

下面是如何得到密码安全的随机数字的一个片段:这将填充8个字节,并且具有随机值的极其强大的序列。

 byte[] salt = new byte[8]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetBytes(salt); 

欲了解更多细节,请参阅如何随机是你的随机?“ (从甲板洗牌CodingHorror文章的启发)

如何随机? 如果你可以处理伪随机,那么简单地说:

 Random randNum = new Random(); randNum. NextDouble(Min, Max); 

如果你想要一个“更好”的随机数,那么你可能应该看看Mersenne Twisteralgorithm。 很多人已经为你实施了

为了解释为什么Longhorn已经被降级了很多: http : //msdn.microsoft.com/en-us/magazine/cc163367.aspx查找NextDouble的实现以及什么是随机double的解释。

这个链接也是如何使用密码随机数(如Sameer提到的)只是与实际有用的输出,而不是比特stream的例子。