在项目中有个要计算的公式字符串,是这样的:
101 投入吨 15
102 成品吨 5.6
103 出片率=(102/101)*100这只是举了一个简单的例子,实际比这复杂,现在的问题是:
我在程序中的103是根据101,102 计算出来的,我在将公式=(102/101)*100替换成(5.6/15)*100的时候采用的Replace,
可总是有些问题,不能应对各种复杂的环境,比如项目中没有的话就是0,
先求类似的做法有好的思路吗?共同探讨一下。谢谢!分不是问题,多的很
101 投入吨 15
102 成品吨 5.6
103 出片率=(102/101)*100这只是举了一个简单的例子,实际比这复杂,现在的问题是:
我在程序中的103是根据101,102 计算出来的,我在将公式=(102/101)*100替换成(5.6/15)*100的时候采用的Replace,
可总是有些问题,不能应对各种复杂的环境,比如项目中没有的话就是0,
先求类似的做法有好的思路吗?共同探讨一下。谢谢!分不是问题,多的很
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,需要判断一下,自己有任务没有多少时间,不好意思
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, "");
}
我在程序中不可能这样写
//判断一下ID1\ID2的有效性
return (GetPercent(ID1)/GetPercent(ID2))*100;
(a+b*c-d)*(e*f)-g/h+i
//好吧 如果你一定要正则的话- -!
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;
}