我们怎样才能获得数量范围

时间:2013-08-06 14:49:56

标签: c# arrays switch-statement range

我想根据C#中的用户输入设置范围编号(例如:1-10)。 我有一个asp文本框,按钮。用户可以在文本框中输入小于10,000的数字。 我想,当用户点击按钮时,用户可以获得他输入值的范围。

例如 - 如果用户在文本框中输入"35",则会获得"Number Range: (31-40)"

但是,我有一些制作范围的特殊条件 -

如果在 -

之间输入数字

a)1到50范围的长度是10 - 例如输入数字是 - 49,范围是(41-50)

b)51到100范围的长度是25 - 例如输入数字是 - 78,范围是(76-100)

c)101到200范围的长度是50 - 例如,输入数字是 - 135,范围是(101-150)

d)201到400范围的长度为100 - 例如输入数字为 - 245,范围为(201-300)

依旧........

我使用Switch Case但是,我没有成功创建正确的逻辑来获得此功能。

感谢您的帮助......我们将不胜感激。

5 个答案:

答案 0 :(得分:1)

一个简单的方法是使用if和else-if like:

if(number < 0)
{
// number below zero
}
else if(number < 10)
{
// range 0 - 9
}
else if(number < 40)
{
// range 10 - 39
}
else if(number < 200)
{
// range 40 - 199
}
else if(number < 1000)
{
// range 200 - 999
}
else
{
// range 1000 -
}

答案 1 :(得分:1)

尝试这个,没有任何if / else /开关,只是好老数学:

int x = yourNumber;
int maxRange = 50;
while (x > maxRange) maxRange *= 2;
int range = maxRange / 4 / 5 * 5;
int begin = ((x-1) / range * range) + 1;
int end = begin + range - 1;

beginend是你的范围的开始和结束,我想你可以自己做其余的事。

答案 2 :(得分:0)

我想只有101以下的数字是专门的,否则它似乎符合一个特定的公式,一个可能的解决方案如下:

public static int[] GetRagneOf(int value) {
    var x=value>0?(value-1)/50:0;

    var power=Math.Log(x, 2);
    var count=25*(int)Math.Pow(2, power);
    var start=1+25*(int)Math.Pow(2, 1+power);

    if(value<101) {
        if(value<76) {
            if(value<51) {
                count=10;
                start=1+value-(value%10);
            }
        }
        else {
            start+=count;
        }
    }

    return Enumerable.Range(start, count).ToArray();
}

答案 3 :(得分:0)

我认为这就是你要找的Enumerable.Range

int num = 35;    
if (num <= 50)
{
    int divisor = 10;
    int quotient = num / divisor;
    var result = Enumerable.Range((quotient * divisor) + 1, divisor).ToArray();
}
else if (num <= 100 )
{
    //I assume you can expand yourself
}

答案 4 :(得分:0)

这是我如何做的一个例子,因为从最初的问题来看,结果应该是字符串,数组还是其他什么都不清楚。

class Program {
    static void Main(string[] args) {
        int[] numbers = { 49, 78, 135, 245, 0, 1, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 400};

        foreach(var number in numbers) {
            string result = GetRange(number);
            Console.WriteLine(string.Format("Input: {0}\tResult: {1}",number, result));
        }

        Console.ReadKey();
    }

    private static string GetRange(int number) {
        if(number <= 50) {
            return RangeByQuotient(number, 10);
        } else if(number <= 100) {
            return RangeByQuotient(number, 25);
        } else if(number <= 200) {
            return RangeByQuotient(number, 50);
        } else if(number <= 400) {
            return RangeByQuotient(number, 100);
        }

        return "Invalid Range";
    }
    private static string RangeByQuotient(int number, int quotient) {
        var lower = ((number-1) / quotient) * quotient + 1;
        var upper = (((number-1) / quotient)+1) * quotient;

        return string.Format("({0}-{1})", lower, upper);
    }
}

结果

Input: 49       Result: (41-50)
Input: 78       Result: (76-100)
Input: 135      Result: (101-150)
Input: 245      Result: (201-300)
Input: 0        Result: (1-10)
Input: 1        Result: (1-10)
Input: 50       Result: (41-50)
Input: 51       Result: (51-75)
Input: 100      Result: (76-100)
Input: 101      Result: (101-150)
Input: 150      Result: (101-150)
Input: 151      Result: (151-200)
Input: 200      Result: (151-200)
Input: 201      Result: (201-300)
Input: 300      Result: (201-300)
Input: 301      Result: (301-400)
Input: 400      Result: (301-400)

<强>更新 更新以正确处理边框情况,如50,51等。