在C#中,我如何像google calc那样实现模数呢?

Blo*_*ard 6 c# modulo

我有一个代表形状的类.Shape类有一个名为Angle的属性.我希望此属性的setter自动将值包装到范围[0,359]中.

不幸的是,简单_Angle = value % 360;只适用于正数.在C#中-40 % 360 == -40.谷歌calc 以我想要的方式做到了.值应为320.

什么是C#中最优雅的解决方案?

这是我到目前为止最好的方式:

     public double Angle {
        get { return _Angle; } 
        set {
            if ( value >= 0 ) {
                _Angle = value % 360;
            }
            else {
                _Angle = value - (360 * ((int)(value / 360) - 1)); 
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

谢谢你们,我现在有:

     public double Angle {
        get { return _Angle; } 
        set {
            _Angle = (value % 360) + ((value < 0) ? 360 : 0);
        }
    }
Run Code Online (Sandbox Code Playgroud)

..哪个好多了:)

coo*_*ird 9

虽然这适用于Java,但Java也具有相同的模数行为.(即-40 % 360 == -40).

以下代码应该从[0.360),无论给定角度,正面还是负面.

public class Mod
{
    public static int mod(int a, int b)
    {
        if (a < 0)
            return b + (a % b);
        else
            return a % b;
    }

    public static void main(String[] args)
    {
        System.out.println(mod(40, 360));   // 40
        System.out.println(mod(-40, 360));  // 320
        System.out.println(mod(-400, 360)); // 320
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,当给定角度超过-360时有效.