在textbox里录入了例如 (10*10-20)/2 ,我想得到其计算结果40,有没有办法实现呀,请大侠们执教!

解决方案 »

  1.   

    http://www.cnblogs.com/lovecherry/archive/2005/03/25/125520.html
      

  2.   

    解析表达式
    /// <summary>
    /// 获取与第一个左括号匹配的右括号
    /// </summary>
    /// <param name="exp">表达式,如(((7)+(8))*(10))</param>
    /// <returns>匹配索引 + 1</returns>
    public static int GetNextBrace(string exp)
    {
    int i = 0;
    int k = 0;
    bool start = true;
    while((k != 0 || start) && i < exp.Length)
    {
    start = false;
    if(exp[i] == '(')
    {
    k ++;
    }
    if(exp[i] == ')')
    {
    k --;
    }
    i ++;
    }
    return i;
    }
    /// <summary>
    /// 递归解析表达式
    /// </summary>
    /// <param name="exp">表达式字符串</param>
    /// <returns>计算结果</returns>
    public static double ParseExpression(string exp)
    {
    // 去掉最外层的括号
    exp = exp.Substring(1, exp.Length - 2);
    if(exp.IndexOf('(') < 0)
    {
    return Double.Parse(exp);
    }
    else
    {
    try
    {
    int i = GetNextBrace(exp);
    double a = ParseExpression(exp.Substring(0, i));
    double b = ParseExpression(exp.Substring(i + 1, exp.Length - i - 1));
    switch(exp[i])
    {
    case '+':
    return a + b;
    case '-':
    return a - b;
    case '*':
    return a * b;
    case '/':
    if(b == 0.0)
    {
    return 0;
    }
    return a / b;
    }
    }
    catch
    {
    throw;
    }
    }
    return 0;
    }
      

  3.   

    每个数值都加上括号,就省去了取完整数值的麻烦;另外还可以处理动态表达式,如:
    ((((count1))+((count2)))*((price)))
    先用实际数值把(count1)、(count2)、(price)替换,再调用上面的递归方法。