string s="1/8"
double f = double.Parse(s);这样不行,因为是分数,不是浮点数。
难道就没有办法解析分数了吗?

解决方案 »

  1.   

    public class Fraction
        {
            ulong divisor;
            ulong dividend;
            /// <summary>
            /// 分母
            /// </summary>
            public ulong Divisor
            {
                get
                {
                    return divisor;
                }
                set
                {
                    if (value != 0)
                        divisor = value;
                    else
                        throw new Exception("分母不能为0.");
                }
            }        /// <summary>
            /// 分子
            /// </summary>
            public ulong Dividend
            {
                get
                {
                    return dividend;
                }
                set
                {
                    dividend = value;
                }        }        public double Value
            {
                get
                {
                    return (double)Dividend / (double)Divisor;
                }
            }        public override string ToString()
            {
                return dividend.ToString() + "/" + divisor.ToString();
            }        /// <summary>
            /// 构造函数
            /// </summary>
            public Fraction() { }        /// <summary>
            /// 将string转成Fraction
            /// </summary>
            /// <param name="numberString">分数字符串</param>
            /// <returns> Fraction 实例,如果转换失败,返回null</returns>
            static public Fraction ConvertToFraction(string numberString)
            {
                if (string.IsNullOrEmpty(numberString))
                    return null;
                string[] result = numberString.Split('/');
                if (result.Length != 2)
                    return null;
                ulong divisor, dividend;
                try
                {
                    divisor = Convert.ToUInt64(result[1]);
                    dividend = Convert.ToUInt64(result[0]);
                }
                catch
                {
                    return null;
                }
                if (divisor == 0)
                    return null;            Fraction fraction = new Fraction();
                fraction.dividend = dividend;
                fraction.divisor = divisor;
                return fraction;        }        /// <summary>
            /// 加法
            /// </summary>
            /// <param name="fraction"></param>
            /// <returns></returns>
            public Fraction Add(Fraction fraction)
            {            Fraction result = new Fraction();
                result.Divisor = minCommonMultiple(this.Divisor, fraction.Divisor);
                result.Dividend = this.Dividend * result.Divisor / this.Divisor + fraction.Dividend * result.Divisor / fraction.Divisor;
                return Simplify(result);
            }        /// <summary>
            /// 减法
            /// </summary>
            /// <param name="fraction"></param>
            /// <returns></returns>
            public Fraction Subtract(Fraction fraction)
            {            Fraction result = new Fraction();
                result.Divisor = minCommonMultiple(this.Divisor, fraction.Divisor);
                result.Dividend = this.Dividend * result.Divisor / this.Divisor - fraction.Dividend *    result.Divisor / fraction.Divisor;
                return Simplify(result);
            }
            /// <summary>
            /// 乘法
            /// </summary>
            /// <param name="fraction"></param>
            /// <returns></returns>
            public Fraction Multiply(Fraction fraction)
            {
                Fraction result = new Fraction();
                result.Divisor = this.Divisor * fraction.Divisor;
                result.Dividend = this.Dividend * fraction.Dividend;
                return Simplify(result);
            }
            /// <summary>
            /// 除法
            /// </summary>
            /// <param name="fraction"></param>
            /// <returns></returns>
            public Fraction Divide(Fraction fraction)
            {
                Fraction result = new Fraction();
                result.Divisor = this.Divisor * fraction.Dividend;
                result.Dividend = this.Dividend * fraction.Divisor;
                return Simplify(result);
            }
            /// <summary>
            /// 最小公倍数
            /// </summary>
            /// <param name="num1"></param>
            /// <param name="num2"></param>
            /// <returns></returns>
            private static ulong minCommonMultiple(ulong num1, ulong num2)
            {
                ulong mcd = maxCommonDivisor(num1, num2);
                if (mcd == 1)
                    return num1 * num2;
                return num1 * num2 / mcd;
            }        /// <summary>
            /// 最大公约数
            /// </summary>
            /// <param name="num1"></param>
            /// <param name="num2"></param>
            /// <returns></returns>
            private static ulong maxCommonDivisor(ulong num1, ulong num2)
            {            ulong min, max;
                if (num1 < num2)
                {
                    min = num1;
                    max = num2;
                }
                else
                {
                    min = num2;
                    max = num1;
                }
                double tmp = ((double)max / (double)min);
                ulong tmp2 = (ulong)tmp;
                if (tmp == (double)tmp2)
                {
                    return tmp2;
                }
                return 1;
            }
            /// <summary>
            /// 化简
            /// </summary>
            /// <param name="fraction"></param>
            /// <returns></returns>
            static public Fraction Simplify(Fraction fraction)
            {
                ulong div = maxCommonDivisor(fraction.Divisor, fraction.Dividend);
                fraction.Divisor /= div;
                fraction.Dividend /= div;
                return fraction;
            }
        }
      

  2.   


    分数化小数
    http://www.cnblogs.com/lsp/articles/623707.html
      

  3.   

    string s="1/8";
    string[] strArray=s.Split('/');
    double real=double.Parse(strArray[0])/double.Parse(strArray[1]);
      

  4.   

    string s="1/8"C#字符串中的/在数值型数据里是非法字符。所以格式不正确。
    string s="1/8"
    string[] tmp = s.Split('/');
    double f = double.Parse(tmp[0])/double.Parse(tmp[1]);
      

  5.   

    string[] vtStr=s.Split(new char[]{'/'});double f;
    if (vtStr==null||vtStr.Length<2)
    {
        f=double.Parse(s);
    }
    else
    {
        f=double.Parse(vtStr[0])/double.Parse(vtStr[1]);
    }
      

  6.   

    '/'是除号,不是非法字符,不过5楼的这个写法是错的,
    s.Split('/');Split没有char作为参数的版本吧?只有char[]参数,所以应该是s.Split(new char[]{'/'});