3

我需要在 C# 中获取一个随机数,(-15, 15)但不会在(-10, 10)浮点数之间生成值。像随机应该带有 in(-15,-10)(10,15)

有可能得到吗?

4

8 回答 8

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;
}
于 2012-10-17T16:26:29.940 回答
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,我们将其视为创建负数的指标。

于 2012-10-17T16:20:12.300 回答
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;
于 2012-10-17T16:21:37.373 回答
0

生成两个随机数。第一个随机数将选择您是在 -15 到 -10 范围内,还是在 10 到 15 范围内,第二个随机数 - 您想要在该范围内走多远。

于 2012-10-17T16:18:51.517 回答
0

尝试:

Random random = new Random();
float value = (float) (Math.Sign((random.NextDouble() - 1)) * (10 + 5 * random.NextDouble()));
于 2012-10-17T16:19:44.637 回答
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();
    }
于 2012-10-17T16:26:56.133 回答
0

如果您想要整数并且希望它具有高性能,我会使用:

var rand = new Random();
int value = rand.Next(-5, 7);
return value > 0 ? value + 9 : value - 10;

我假设您想要范围内的数字:[-15, -10] 和 [10, -15]。适当调整上面的硬编码值。为了提高性能,可能有一种方法可以做一些算术并避免比较,但我会把它留给评论。

于 2012-10-17T16:39:10.283 回答
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);
于 2012-10-17T16:48:04.683 回答