一段很简单的计算公式代码:
 
string str = "(a-b)*12+c-d";//与此字符串相对应的是一个数组:3,4,5,6   
 str = str.Replace("a", a.ToString());
 str = str.Replace("b", b.ToString());
str = str.Replace("c", c.ToString());
str = str.Replace("d", d.ToString());  
//转换出来的公式为:
//(3-4)*12+5-6
 double dd = Convert.ToDouble(str);  //这句报错,怎么才能取到计算的结果呢?
对不起,时间太紧,思维乱了,上来提个问,谢谢

解决方案 »

  1.   

    我晕你看看下面这个帖子吧:
    http://topic.csdn.net/u/20081014/22/b23d60b2-0556-4512-8fac-c0302cb3d628.html
      

  2.   

    Convert.ToDouble(str); 这个是数据类型转换函数,并不能实现计算功能.也就是说,你只能自己把公式拆开一点点计算
      

  3.   

    一个取巧的办法
    利用DataTable和DataColumn来做,把DataColumn的expression定义为你的计算公司,把你的变量定义为其他字段,就可以得出值来还有一个办法就是到数据库去执行,拼成一个sql语句
    string str = "(a-b)*12+c-d";//与此字符串相对应的是一个数组:3,4,5,6   
     str = str.Replace("a", a.ToString());
     str = str.Replace("b", b.ToString());
    str = str.Replace("c", c.ToString());
    str = str.Replace("d", d.ToString());  
    //转换出来的公式为:
    //(3-4)*12+5-6
    string sql = "select " + str;//到数据库执行sql
      

  4.   

    呵呵,目前这个问题比较麻烦的说
    最简单的方法是 借用dataTable以后net4出来就方便点了,可以使用动态语言特性了
      

  5.   

    还有一个问题
     private string ComputeField(sting[] Items, string strFormula)
            {
               string[] Item = null;
              strFormula.Replace(Item[0].ToString(), Item[1].ToString());
                
                MessageBox.Show(strFormula);
                return strFormula;
            }
    string[] ss=new string[2];
    ss[0]="101";
    ss[1]="20";
    string s=ComputeField(ss, "101+102")  //为什么没有替换呢?
      

  6.   

    private string ComputeField(sting[] Items, string strFormula) 
            { 
              string[] Item = null; 
              strFormula.Replace(Item[0].ToString(), Item[1].ToString());             
                MessageBox.Show(strFormula); 
                return strFormula; 
            } 
    把红色的改成
    strFormula = strFormula.Replace(Item[0].ToString(), Item[1].ToString()); 
      

  7.   

    private string ComputeField(sting[] Items, string strFormula) 
            { 
              string[] Item = null; 
              strFormula=strFormula.Replace(Item[0].ToString(), Item[1].ToString()); 
                
                MessageBox.Show(strFormula); 
                return strFormula; 
            } 
      

  8.   


    如果是数字计算
    干嘛用string 直接数值就好了嘛double dd = (a-b)*12+c-d * 1.0;a如果是string 的话int inta = Convert.ToInt32(a);