Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置一个零点,如果该值低于或高于该值,则显示为-value或+;价值_C#_C# 4.0 - Fatal编程技术网

C# 设置一个零点,如果该值低于或高于该值,则显示为-value或+;价值

C# 设置一个零点,如果该值低于或高于该值,则显示为-value或+;价值,c#,c#-4.0,C#,C# 4.0,我有一个0到359的输入(指南针) 我想设置一个零点,如果该值低于或高于此值,则显示为-value或+value 例如: Zero Point: 2 Input: 340 => Output: -22 Input: 22 => Output: 20 或 所以无论罗盘在哪里,输出总是相对于零点 PS:或者更简短:我如何将0->359的重复序列转换成一个线性序列,就像正常的数字行一样?因此,如果向上计数2次达到359,函数告诉我它在720(我可能在这里错过了正确的值1°或2°),而不是

我有一个0到359的输入(指南针)

我想设置一个零点,如果该值低于或高于此值,则显示为-value或+value

例如:

Zero Point: 2
Input: 340 => Output: -22
Input: 22 => Output: 20

所以无论罗盘在哪里,输出总是相对于零点


PS:或者更简短:我如何将0->359的重复序列转换成一个线性序列,就像正常的数字行一样?因此,如果向上计数2次达到359,函数告诉我它在720(我可能在这里错过了正确的值1°或2°),而不是359?

假设您想要从-179到180的输出,并且零点可以从0到359

int output(int deg, int zeropoint)
    {
        var relative = deg - zeropoint;
        if (relative > 180)
            relative -= 360;
        else if (relative < -179)
            relative += 360;
        return relative;
    }
int输出(int度,int零点)
{
var相对=度-零点;
如果(相对>180)
相对-=360;
否则如果(相对<-179)
相对+=360;
回归关系;
}

假设您想要从-179到180的输出,并且零点可以从0到359

int output(int deg, int zeropoint)
    {
        var relative = deg - zeropoint;
        if (relative > 180)
            relative -= 360;
        else if (relative < -179)
            relative += 360;
        return relative;
    }
int输出(int度,int零点)
{
var相对=度-零点;
如果(相对>180)
相对-=360;
否则如果(相对<-179)
相对+=360;
回归关系;
}

我认为这符合您的要求,但我对您的要求没有信心。基本上,给定一个特定大小的“时钟”、一个获取相对距离的点和一个输入值,它将找到到“时钟”上的点的最小距离,无论是负距离还是正距离

    static void Main(string[] args)
    {
        Console.WriteLine(getRelativeValue(2, 360, 340)); //-22
        Console.WriteLine(getRelativeValue(2, 360, 22));  // 20
        Console.WriteLine(getRelativeValue(2, 360, 178)); // 176
        Console.Read();
    }

    static int getRelativeValue(int point, int upperBound, int value)
    {
        value %= upperBound;
        int lowerBoundPoint = -(upperBound - value + point);
        int upperBoundPoint = (value - point);

        if (Math.Abs(lowerBoundPoint) > Math.Abs(upperBoundPoint))
        {
            return upperBoundPoint;
        }
        else
        {
            return lowerBoundPoint;
        }
    }

我认为这符合你的要求,但我对你的要求没有信心。基本上,给定一个特定大小的“时钟”、一个获取相对距离的点和一个输入值,它将找到到“时钟”上的点的最小距离,无论是负距离还是正距离

    static void Main(string[] args)
    {
        Console.WriteLine(getRelativeValue(2, 360, 340)); //-22
        Console.WriteLine(getRelativeValue(2, 360, 22));  // 20
        Console.WriteLine(getRelativeValue(2, 360, 178)); // 176
        Console.Read();
    }

    static int getRelativeValue(int point, int upperBound, int value)
    {
        value %= upperBound;
        int lowerBoundPoint = -(upperBound - value + point);
        int upperBoundPoint = (value - point);

        if (Math.Abs(lowerBoundPoint) > Math.Abs(upperBoundPoint))
        {
            return upperBoundPoint;
        }
        else
        {
            return lowerBoundPoint;
        }
    }

你试过什么?这里也没有足够的信息来提供帮助。设置什么?你的输出是什么?您如何确定这些输入的输出?为什么340的输出为-22?正负值之间的边界在哪里?您是否尝试自己创建这样的方法?粘贴你的代码。@filipko边界是零点。@user2348735我想你不明白。假设我们有输入182。我们怎么知道它的输出是180还是-179?@user2348735:那么,不可能用简单的算术运算(例如减法)来演示逻辑吗?那么根本就没有解决方案,否则你已经找到了解决方案。你尝试了什么?这里也没有足够的信息来提供帮助。设置什么?你的输出是什么?您如何确定这些输入的输出?为什么340的输出为-22?正负值之间的边界在哪里?您是否尝试自己创建这样的方法?粘贴你的代码。@filipko边界是零点。@user2348735我想你不明白。假设我们有输入182。我们怎么知道它的输出是180还是-179?@user2348735:那么,不可能用简单的算术运算(例如减法)来演示逻辑吗?那么根本就没有解决方案,否则你已经有了解决方案。如果
的话,你应该将答案改为使用
else
,而不是
else,否则+1否-如果相对值已经在预期范围内,就不应该进行标准化(既不加也不减360)啊,对不起,我错过了那一位-还没有醒来!您应该将答案更改为使用
else
而不是
else if
但如果是+1否-如果相对值已在预期范围内,则不应进行标准化(既不加也不减360)啊,对不起,我错过了那一位-尚未醒来!