当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在C#中,我如何像googlecalc那样实现模数呢?》经验,为你挑选了1个好方法。

我有一个代表形状的类.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)); 
            }
        }
    }

编辑:

谢谢你们,我现在有:

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

..哪个好多了:)



1> coobird..:

虽然这适用于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
    }
}

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

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有