所以也许我希望将-1.0和1.0之间的值作为浮点数。使用IMO扩展方法将其写入并将其固定在顶部是笨拙的。
答案 0 :(得分:18)
还有.NextDouble()
方法几乎完全符合您的要求 - 只需0到1.0而不是-1.0到1.0。
答案 1 :(得分:14)
public static double NextDouble(this Random rnd, double min, double max){
return rnd.NextDouble() * (max - min) + min;
}
致电:
double x = rnd.NextDouble(-1, 1);
获取范围-1 <= x < 1
答案 2 :(得分:4)
因为大多数时候,我们想要一个范围内的int,所以我们提供了方法来做到这一点。许多语言仅支持随机方法,该方法返回介于0.0和1.0之间的double。 C#在.NextDouble()方法中提供此功能。
这是足够好的设计,因为它使常见的容易(滚动模具 - myRandom.Next(1,7);)和其他可能。 - myRandom.NextDouble()* 2.0 - 1.0;
答案 3 :(得分:3)
您可以使用Random.NextDouble()方法生成0.0到1.0之间的随机值,如@ Joel_Coehorn的建议
我只想补充一点,将范围扩展到-1.0和1.0是一个简单的计算
var r = new Random();
var randomValue = r.NextDouble() * 2.0 - 1.0
或者为了概括它,将NextDouble()
结果扩展到任何范围(a,b),你可以这样做:
var randomValue = r.NextDouble() * (b - a) - a
答案 4 :(得分:1)
另一方面,我必须指出,最后,框架中的随机数生成算法并不笨拙(如cstdlib的rand()
),但实际上是一个很好的实现(Park&amp;米勒,IIRC)。
答案 5 :(得分:0)
我见过的绝大部分随机数用法(实际上我所见过的,虽然显然是在三十年的编程中我没有看到太多)在指定范围内生成随机整数。
因此Random.Next对我来说似乎很方便。
答案 6 :(得分:0)
不得不写这个和笨拙 使用扩展方法将其固定在顶部
不是真的 - 扩展方法很简洁,我很高兴有这样的功能。
答案 7 :(得分:0)
这种方法并不难添加,似乎是扩展方法的完美用法。
public double NextSignedDouble(this Random r)
{
return (r.Next(0, 2) == 0) ? r.NextDouble() : (r.NextDouble() * -1);
}