关于计算的问题,跪求!在线等! 在textbox里录入了例如 (10*10-20)/2 ,我想得到其计算结果40,有没有办法实现呀,请大侠们执教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.cnblogs.com/lovecherry/archive/2005/03/25/125520.html 解析表达式/// <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;} 每个数值都加上括号,就省去了取完整数值的麻烦;另外还可以处理动态表达式,如:((((count1))+((count2)))*((price)))先用实际数值把(count1)、(count2)、(price)替换,再调用上面的递归方法。 分享+讨论:c#中类的序列化:一般化解决方法及最后的疑问 C#控制台如何重定向输入输出流? C# Winform 的学习方法。 如何把vsproj解析为树形目录?.NET提供了这样的接口吗(类似于CodeDom)? 关于VS2005C#和数据库``` 为什么?我的数据库连不上? 如何实现向qq一样客户端提醒功能啊? 很简单的问题,请高手指点一下!急! 透视表求助 请问各位大师怎么用c#做工具箱??? WinForm中的TreeView取结点修改后的文本问题? [急] C#中一个工程中的Form如何引用另一个工程中的Form???
/// <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;
}
((((count1))+((count2)))*((price)))
先用实际数值把(count1)、(count2)、(price)替换,再调用上面的递归方法。