我想在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这很重要,但是如果你以两种方式解决这个问题,只要不弄乱所用变量的顺序,你就会发现它的工作方式相同.我喜欢用更长的变量名来表达它,所以我不会混淆:
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()*(b-a); }