C# 分數計算類(加減乘除)


參數網址:http://www.sharejs.com/codes/csharp/7133

using System;

namespace TT.Entity
{
    /// <summary>
    /// 分數類
    /// </summary>
    public class Fraction
    {

        #region property

        private double _denominator;

        /// <summary>
        /// 分母
        /// </summary>
        public double Denominator
        {
            get
            {
                return _denominator;
            }
            set
            {
                if (value == 0)
                {
                    throw new InvalidOperationException("分母不能為0");
                }
                _denominator = value;
            }
        }

        /// <summary>
        /// 分子
        /// </summary>
        public double Numerator { get; set; }

        #endregion

        #region constructor

        public Fraction()
        {

        }

        /// <summary>
        /// 創建分數(默認分母為1)
        /// </summary>
        /// <param name="numerator">分子</param>
        public Fraction(double numerator)
        {
            Numerator = numerator;
            _denominator = 1;
        }

        /// <summary>
        /// 創建分數
        /// </summary>
        /// <param name="numerator">分子</param>
        /// <param name="denominator">分母</param>
        public Fraction(double numerator, double denominator)
        {
            Numerator = numerator;
            _denominator = denominator;
        }

        #endregion

        #region method

        /// <summary>l
        /// 相加
        /// </summary>
        /// <param name="d1"></param>
        /// <param name="d2"></param>
        /// <returns></returns>
        public Fraction Add(double d1, double d2)
        {
            return Add(new Fraction(d1), new Fraction(d2));
        }

        /// <summary>
        ///  計算兩個數的相減,並返回一個分數
        /// </summary>
        /// <param name="minuend">被減數</param>
        /// <param name="subtrahend">減數</param>
        /// <returns></returns>
        public Fraction Sub(double minuend, double subtrahend)
        {
            return Sub(new Fraction(minuend), new Fraction(subtrahend));
        }


        /// <summary>
        /// 計算兩個數的相乘,並返回一個分數
        /// </summary>
        /// <param name="d1"></param>
        /// <param name="d2"></param>
        /// <returns></returns>
        public Fraction Multiple(double d1, double d2)
        {
            return Multiple(new Fraction(d1), new Fraction(d2));
        }

        /// <summary>
        /// 計算兩個數的相除,並返回一個分數
        /// </summary>
        /// <param name="dividend">被除數</param>
        /// <param name="divisor">除數</param>
        /// <returns></returns>
        public Fraction Divided(double dividend, double divisor)
        {
            return Divided(new Fraction(dividend), new Fraction(divisor));
        }


        public string GetFractionValueString()
        {
            return string.Format("{0}/{1}", Numerator, Denominator);
        }

        public double GetFractionValue()
        {
            return Numerator / Denominator;
        }


        /// <summary>
        /// 計算兩個分數的相加,並返回一個分數
        /// </summary>
        /// <param name="f1"></param>
        /// <param name="f2"></param>
        /// <returns></returns>
        public Fraction Add(Fraction f1, Fraction f2)
        {
            Fraction result = new Fraction();
            double dencominator = CalculateLeaseCommonMultiple(f1.Denominator, f2.Denominator);
            f1.Numerator = (dencominator / f1.Denominator) * f1.Numerator;
            f2.Numerator = (dencominator / f2.Denominator) * f2.Numerator;
            result.Denominator = dencominator;
            result.Numerator = f1.Numerator + f2.Numerator;
            return result;
        }

        /// <summary>
        ///  計算兩個分數的相減,並返回一個分數
        /// </summary>
        /// <param name="minuend">被減數</param>
        /// <param name="subtrahend">減數</param>
        /// <returns></returns>
        public Fraction Sub(Fraction minuend, Fraction subtrahend)
        {
            Fraction result = new Fraction();
            double dencominator = CalculateLeaseCommonMultiple(minuend.Denominator, subtrahend.Denominator);
            minuend.Numerator = (dencominator / minuend.Denominator) * minuend.Numerator;
            subtrahend.Numerator = (dencominator / subtrahend.Denominator) * subtrahend.Numerator;
            result.Denominator = dencominator;
            result.Numerator = minuend.Numerator - subtrahend.Numerator;
            return result;
        }

        /// <summary>
        /// 計算兩個分數的相乘,並返回一個分數
        /// </summary>
        /// <param name="f1"></param>
        /// <param name="f2"></param>
        /// <returns></returns>
        public Fraction Multiple(Fraction f1, Fraction f2)
        {
            Fraction result = new Fraction();
            double dencominator = f1.Denominator * f2.Denominator;
            result.Denominator = dencominator;
            result.Numerator = f1.Numerator * f2.Numerator;
            return result;
        }

        /// <summary>
        /// 計算兩個分數的相除,並返回一個分數
        /// </summary>
        /// <param name="dividend">被除數</param>
        /// <param name="divisor">除數</param>
        /// <returns></returns>
        public Fraction Divided(Fraction dividend, Fraction divisor)
        {
            Fraction result = new Fraction();
            double dencominator = dividend.Denominator * divisor.Numerator;
            result.Denominator = dencominator;
            result.Numerator = dividend.Numerator * divisor.Denominator;
            return result;
        }

        #endregion

        #region private

        /// <summary>
        /// 計算最小公倍數
        /// </summary>
        /// <param name="d1"></param>
        /// <param name="d2"></param>
        /// <returns></returns>
        private double CalculateLeaseCommonMultiple(double d1, double d2)
        {
            double result = Math.Max(d1, d2);
            double i = 1D;
            do
            {
                if (result % d1 == 0D
                    && result % d2 == 0D)
                {
                    break;
                }
                else
                {
                    result *= (++i);
                }
            } while (true);

            return result;
        }

        #endregion

      

    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM