度分秒的加减乘除等于输入输出

度分秒的相关运算

包括度分秒和数字的加法运算,
度分秒和数字的除法,
度分秒和度分秒的加减乘除法
度分秒和度分秒的大小对比
参数构造函数,无参构造函数

    public class SpeDegrre
    {
        private int deg;
        public int Deg
        {
            set
            {
                if (value >= 0 && value <= 360)
                {
                    deg = value;
                }
            }
            get
            {
                return deg;
            }
        }
        private int min;
        public int Min
        {
            set
            {
                if (value >= 0 && value < 60)
                {
                    min = value;
                }
            }
            get
            {
                return min;
            }
        }
        private int sec;
        public int Sec
        {
            set
            {
                if (value >= 0 && value < 60)
                {
                    sec = value;
                }
            }
            get
            {
                return sec;
            }
        }
        /// <summary>
        /// symbol,1,为正
        /// -1,为负
        /// </summary>
        /// 
        public int symbol = 1;
        public SpeDegrre()
        {
            deg = 0;
            min = 0;
            sec = 0;
            symbol = 1;
            //Debug.Log(":" + deg + "," + min + "," + sec);
        }
        public SpeDegrre(int vaDeg, int vaMin, int vaSec,int vaSym=1)
        {
            //Debug.Log(":" + vaDeg + "," + vaMin + "," + vaSec+","+vaSym);
            if(vaSym>0 && (vaDeg < 0 || vaMin < 0 || vaSec < 0))
            {
                symbol = -1;
            }
            else
            {
                symbol = vaSym;
            }
            vaDeg = Mathf.Abs(vaDeg);
            vaMin = Math.Abs(vaMin);
            vaSec = Math.Abs(vaSec);

            if (vaSec >= 60)
            {
                int temp = vaSec % 60;
                int temp02 = vaSec / 60;
                sec = temp;
                vaMin += temp02;
            }
            else
            {
                sec = vaSec;
            }
            if (vaMin >= 60)
            {
                int temp = vaMin % 60;
                int temp02 = vaMin / 60;
                min = temp;
                vaDeg += temp02;
            }
            else
            {
                min = vaMin;
            }
            if (vaDeg > 360)
            {
                int temp = vaDeg % 360;
                deg = temp;
            }
            else
            {
                deg = vaDeg;
            }
        }
        public SpeDegrre(SpeDegrre b)
        {
            deg = b.deg;
            min = b.min;
            sec = b.sec;
            symbol = b.symbol;
        }
        public static SpeDegrre operator +(SpeDegrre b, SpeDegrre c)
        {
            SpeDegrre box = new SpeDegrre();
            if (b.symbol * c.symbol == 1)
            {
                box = Add(b, c);
                box.symbol = b.symbol;
            }
            else if (b.symbol > 0 && c.symbol < 0)
            {
                var tempc = new SpeDegrre(c);
                tempc.symbol = 1;
                if (b > tempc || b == tempc)
                {
                    box = Reduce(b, c);
                }
                else if (b < tempc)
                {
                    box = Reduce(c, b);
                    box.symbol = -1;
                }
            }
            else if (b.symbol < 0 && c.symbol > 0)
            {
                var tempb = new SpeDegrre(b);
                tempb.symbol = 1;
                if (c > tempb || c == tempb)
                {
                    box = Reduce(c, b);
                }
                else
                {
                    box = Reduce(b, c);
                    box.symbol = -1;
                }
            }
            return box;
        }
        public static SpeDegrre operator +(SpeDegrre a, int b)
        {
            SpeDegrre box = new SpeDegrre();
            if (a.symbol > 0)
            {
                box.deg = a.deg + b;

                if (box.deg >= 360)
                {
                    box.deg -= 360;
                }
            }
            else if (a.symbol < 0 && b > 0)
            {
                var temp = new SpeDegrre(b, 0, 0);
                box = temp + a;
            }
            return box;
        }
        public static SpeDegrre operator -(SpeDegrre b, SpeDegrre c)
        {
            SpeDegrre box = new SpeDegrre();
            var tempb = new SpeDegrre(b.deg, b.min, b.sec);
            var tempc = new SpeDegrre(c.deg, c.min, c.sec);
            SpeDegrre box2 = Add(tempb, tempc);
            if (b.symbol > 0 && c.symbol > 0)
            {
                if (tempb > tempc || tempb == tempc)
                {
                    box = Reduce(tempb, tempc);
                }
                else
                {
                    box = Reduce(tempc, tempb);
                    box.symbol = -1;
                    //Debug.Log(box.ToString()+","+box.symbol);
                }
            }
            else if (b.symbol < 0 && c.symbol < 0)
            {
                if (tempb < tempc || tempb == tempc)
                {
                    box = Reduce(tempc, tempb);
                    box.symbol = 1;
                }
                else
                {
                    box = Reduce(tempb, tempc);
                    box.symbol = -1;
                }
            }
            else if (b.symbol < 0 && c.symbol > 0)
            {
                box = new SpeDegrre(box2);
                box.symbol = -1;
            }
            else if (b.symbol > 0 && c.symbol < 0)
            {
                box = new SpeDegrre(box2);
                box.symbol = 1;
            }
            return box;
        }
        private static SpeDegrre Add(SpeDegrre b, SpeDegrre c)
        {
            SpeDegrre sum = new SpeDegrre();
            sum.deg = b.deg + c.deg;
            sum.min = b.min + c.min;
            sum.sec = b.sec + c.sec;

            if (sum.sec > 60)
            {
                sum.min++;
                sum.sec -= 60;
            }
            if (sum.min > 60)
            {
                sum.min -= 60;
                sum.deg++;
            }
            if (sum.deg >= 360)
            {
                sum.deg -= 360;
            }
            return sum;
        }
        private static SpeDegrre Reduce(SpeDegrre b, SpeDegrre c)
        {
            SpeDegrre box = new SpeDegrre();
            int vadeg = b.deg - c.deg;
            int vamin = b.min - c.min;
            int vasec = b.sec - c.sec;
            if (vasec < 0)
            {
                vamin--;
                vasec += 60;
            }
            if (vamin < 0)
            {
                vadeg--;
                vamin += 60;
            }
            if (vadeg < 0)
            {
                box.symbol = -1;
            }
            box.deg = vadeg;
            box.min = vamin;
            box.sec = vasec;
            return box;
        }
        public static SpeDegrre operator /(SpeDegrre b, float c)
        {
            if (c == 0) return b;
            SpeDegrre box = new SpeDegrre();
            var degTemp = b.deg / c;
            var minTemp = b.min / c;
            var secTemp = b.sec / c;
            var degree = Mathf.FloorToInt(degTemp);
            box.deg = degree;
            var minF = (degTemp - degree) * 60 + minTemp;

            if (minF >= 60)
            {
                box.deg++;
                minF -= 60;
            }
            var min = Mathf.FloorToInt(minF);
            box.min = min;
            var sec = Mathf.FloorToInt((minF - min) * 60) + secTemp;

            if (sec >= 60)
            {
                box.min++;
                sec -= 60;
            }
            box.sec = (int)sec;
            if ((b.symbol > 0 && c > 0)
                || (b.symbol < 0 && c < 0))
            {
                box.symbol = 1;
            }
            else
            {
                box.symbol = -1;
            }
            return box;
        }
        public static SpeDegrre operator /(SpeDegrre b, SpeDegrre c)
        {
            SpeDegrre box = new SpeDegrre();
            double mylonga = (b.Deg * 3600 + b.Min * 60 + b.Sec);
            double mylongb = (c.Deg * 3600 + c.Min * 60 + c.Sec);
            double m = (mylonga) / (mylongb);
            m = m * 3600;

            int degree = (int)(m / 3600);
            int min =(int)( (m - degree * 3600) / 60);
            int sec =(int) (m - degree * 3600 - min * 60);


            box.deg = degree;
            box.min = min;
            box.sec = sec;
            if (b.symbol * c.symbol == 1)
            {
                box.symbol = 1;
            }
            else
            {
                box.symbol = -1;
            }
            return box;
        }
        public static SpeDegrre operator *(SpeDegrre b, SpeDegrre c)
        {
            SpeDegrre box = new SpeDegrre();
            double mylonga = (b.Deg*3600  + b.Min *60 + b.Sec);
            double mylongb = (c.Deg*3600 + c.Min *60 + c.Sec);
            decimal m =(decimal) ((mylonga/3600) * (mylongb/3600));
            m = m * 3600;

            int degree = (int)(m / 3600);
            int min = (int)((m - degree * 3600) / 60);
            int sec = (int)(m - degree * 3600 - min * 60);


            box.deg = degree;
            box.min = min;
            box.sec = sec;

            if (b.symbol * c.symbol == 1)
            {
                box.symbol = 1;
            }
            else
            {
                box.symbol = -1;
            }
            return box;
        }
        public static bool operator <(SpeDegrre b, SpeDegrre c)
        {
            if (b == c) return false;
            return !(b > c);
        }
        public static bool operator >(SpeDegrre b, SpeDegrre c)
        {
            if (b == c) return false;
            if (b.symbol > 0 && c.symbol < 0)
            {
                return true;
            }
            else if (b.symbol < 0 && c.symbol > 0)
            {
                return false;
            }
            else
            {
                bool resliut;
                if (b.deg == c.deg)
                {
                    if (b.min == c.min)
                    {
                        if (b.sec <= c.sec)
                        {
                            resliut = false;
                        }
                        else
                        {
                            resliut = true;
                        }
                    }
                    else if (b.min < c.min)
                    {
                        resliut = false;
                    }
                    else
                    {
                        resliut = true;
                    }
                }
                else if (b.deg < c.deg)
                {
                    resliut = false;
                }
                else
                {
                    resliut = true;
                }
                resliut = b.symbol > 0 ? resliut : !resliut;
                return resliut;
            }
        }

        public override bool Equals(object obj) => this.Equals(obj as SpeDegrre);
        public bool Equals(SpeDegrre b)
        {
            if (b is null)
            {
                return false;
            }

            // Optimization for a common success case.
            if (ReferenceEquals(this, b))
            {
                return true;
            }

            // If run-time types are not exactly the same, return false.
            if (GetType() != b.GetType())
            {
                return false;
            }

            // Return true if the fields match.
            // Note that the base class is not invoked because it is
            // System.Object, which defines Equals as reference equality.
            return (deg == b.deg) && (min == b.min) && (sec == b.sec) && (symbol == b.symbol);
            //return (this == obj);
        }

        public override int GetHashCode() => (deg, min, sec).GetHashCode();

        public static bool operator ==(SpeDegrre a, SpeDegrre b)
        {
            if (a is null)
            {
                if (b is null)
                {
                    return true;
                }

                // Only the left side is null.
                return false;
            }
            // Equals handles case of null on right side.
            return a.Equals(b);
        }

        public static bool operator !=(SpeDegrre a, SpeDegrre b) => !(a == b);

        public override string ToString()
        {
            if (symbol < 0)
            {
                return string.Format("-{0}°{1}′{2}″", deg,
    min, sec);
            }
            else
            {
                return string.Format("{0}°{1}′{2}″", deg,
    min, sec);
            }
        }
        public float GetFloatDeg()
        {
            float angleDeg = ((float)Deg);
            float angleMin = (((float)Min) / 60);
            float angleSec = (((float)Sec) / 3600);
            return angleDeg + angleMin + angleSec;
        }
    }

下面是度分秒输入

                for (int n = 0; n < myinputs.Length; n++)
                {
                    var temp = n;
                    myinputs[n].onEndEdit.AddListener((str) => FillData(temp));
                }
        private void FillData(int temp)
        {
            if (CheckAngeAingle(temp))
            {
                myinputs[temp].text = olddata[temp].ToString();
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱岗酸豆角吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值