在项目中有个要计算的公式字符串,是这样的:
101 投入吨 15
102 成品吨 5.6
103 出片率=(102/101)*100这只是举了一个简单的例子,实际比这复杂,现在的问题是:
我在程序中的103是根据101,102 计算出来的,我在将公式=(102/101)*100替换成(5.6/15)*100的时候采用的Replace,
可总是有些问题,不能应对各种复杂的环境,比如项目中没有的话就是0,
先求类似的做法有好的思路吗?共同探讨一下。谢谢!分不是问题,多的很

解决方案 »

  1.   

    我的思考如下:
    ID  NAME  REGEXPRESSION  101 投入吨 15 
    102 成品吨 5.6 
    103 出片率=(102/101)*100 
    public Decimal GetPercent(ID)
    {
       String strExpression=REGEXPRESSION;
       Regex objRegex=new Regex("^\s*(\s*(?<One>\d+)\s*/\s*(?<Two>\d+)\s*)\*100\s*$");
       MatchCollection objMatches = objRegex.Matches(strExpression);   ID1=objMatches[0].Groups["One"].Value;
       ID2=objMatches[0].Groups["Two"].Value;   //判断一下ID1\ID2的有效性
       return (GetPercent(ID1)/GetPercent(ID2))*100;  
    }这仅仅是个大概的思路,主要用到正则表达式的组匹配,也用到了递归,如果被除数有可能是0,需要判断一下,自己有任务没有多少时间,不好意思
      

  2.   


                this.Text=GetFormulaValue("({0}/{1})*100", new string[] {"5.6","15"}).ToString();
    //37.333333333333333333333333330 this.Text=GetFormulaValue("({0}/{1})*100", new string[] {"5.6","0"}).ToString();
    // 正无穷大.
                
            public object GetFormulaValue(string p_Formula, string[] p_Value)
            {
                string _Formula = string.Format(p_Formula, p_Value);
                DataTable _CalculatedTable = new DataTable();
                return _CalculatedTable.Compute(_Formula, "");
            }
      

  3.   

    现在关键是项目和公式都是客户定义的
    我在程序中不可能这样写
    //判断一下ID1\ID2的有效性 
      return (GetPercent(ID1)/GetPercent(ID2))*100;  
      

  4.   

    公式替换和计算器的公式替换的道理是一样的,这个我认为要简单一些
    (a+b*c-d)*(e*f)-g/h+i
      

  5.   


    //好吧 如果你一定要正则的话- -!
    str = Regex.Replace(str, @"\d+", delegate(Match m) { return Search(m.Value); }, RegexOptions.IgnoreCase);private string Search(string s)
    {
         if (s == "102")
             return "5.6";
         if (s == "101")
             return "15";
         return s;
    }