如何在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的例子。