我需要在(-15, 15)
内的C#中获取一个随机数,但不能在(-10, 10)
之间生成值作为浮点数。就像随机应该在(-15,-10)
和(10,15)
中一样。
有可能获得吗?
答案 0 :(得分:7)
这可以在一行中完成,但为了清楚起见,我把它分开了。
public double GetRandomNumber()
{
//Between 0 and 1
Random random = new Random();
double randomNumber = random.NextDouble();
//Between -0.5 and 0.5;
randomNumber -= 0.5;
//Between -5.0 and 5.0;
randomNumber *= 10.0;
//Between [-15.0, -10.0] or [10.0, 15.0]
randomNumber += Math.Sign(randomNumber) * 10.0;
return randomNumber;
}
答案 1 :(得分:3)
一种方法是使用它:
var random = new Random();
var result = random.NextDouble();
if(result < 0.5)
result = -15 + result * 10;
else
result = 5 + result * 10;
Random.NextDouble
生成介于0.0和1.0之间的数字
如果它小于0.5,我们将其视为创建负数的指标。
答案 2 :(得分:1)
另一种方法,假设您确实需要在结果中使用小数位(因为它不完全清楚)。
Random rand = new Random();
var intValue = rand.Next(10,15);
var decimalValue = rand.NextDouble();
var sign = rand.Next(0,1);
if (sign == 0) sign = -1;
return (intValue + decimalValue) * sign;
答案 3 :(得分:0)
生成两个随机数。第一个随机数将选择您是在-15到-10范围内,还是在10到15范围内,第二个是您希望在该范围内的距离。
答案 4 :(得分:0)
尝试:
Random random = new Random();
float value = (float) (Math.Sign((random.NextDouble() - 1)) * (10 + 5 * random.NextDouble()));
答案 5 :(得分:0)
static Random r = new Random(2);
static void Main(string[] args)
{
int d = r.Next(-15, 15);
while ((d >= -15 && d <= -10) || (d >= 10 && d <= 15))
Console.WriteLine(d);
Console.ReadLine();
}
答案 6 :(得分:0)
如果你想要整数而你想要它是高效的,我会使用:
var rand = new Random();
int value = rand.Next(-5, 7);
return value > 0 ? value + 9 : value - 10;
我假设你想要范围内的数字:[ - 15,-10]和[10,-15]。适当调整上面的硬编码值。为了使其更高效,可能有一种方法可以进行一些算术并避免比较,但我会将其留给评论。
答案 7 :(得分:0)
这是一个实现它的静态方法:
public static int RandomRange(int min, int max, bool includeNegatives = false)
{
if( min >= max) throw new Exception("min can't be greater than max");
Random rdm = new Random();
int num = 0;
while (num < min) num = rdm.Next(max + 1);
return num * (rdm.Next() % 2 == 0 ? -1 : 1);
}
要打电话:
var TenToFifteenNegatives = RandomRange(10, 15, true);
var TenToFifteenNoNegatives = RandomRange(10, 15);