//取栈操作,并计算
Func<Stack<string>, double> GetVal2 = (m) =>
{
if (m.Count == 0) { return 0; }
System.Diagnostics.Debug.Print(m.ToString());
string A, B, C; double D = 0;
A = m.Pop();//出栈并计算
B = m.Pop();
C = m.Pop();
switch (A)
{
case "×":
D = Convert.ToDouble(B) * Convert.ToDouble(C);
break;
case "÷":
D = Convert.ToDouble(B) / Convert.ToDouble(C);
break;
case "+":
D = Convert.ToDouble(B) + Convert.ToDouble(C);
break;
case "-":
D = Convert.ToDouble(B) - Convert.ToDouble(C);
break;
}
return Math.Round(D, 2);
};
//传入计算式(字符串,返回值)
Func<string,string> GetVal1 = (m) =>
{
StringBuilder sb = new StringBuilder();
Stack<string> val = new Stack<string>();
ArrayList arr=new ArrayList(m.Split(' ').ToArray());
for (int i = 0; i < arr.Count - 1; i++)
{
//if (v != "0")
//{
if (arr[i].ToString() == "#")
{
arr.RemoveAt(i);
arr.Insert(i, Val2);
}
//}
Action d =()=>{
val.Push(arr[i + 1].ToString());
arr.RemoveAt(i + 1);//删*右13
val.Push(arr[i - 1].ToString());
arr.RemoveAt(i - 1);//删*左14
val.Push(arr[i - 1].ToString());
arr.RemoveAt(i - 1);//删*但是前面减了13往左移-1
arr.Insert(i - 1, GetVal2(val).ToString());
};
if (arr.Contains("×") == true || arr.Contains("÷") == true)
{
if (arr[i].ToString() == "×" || arr[i].ToString() == "÷")
{
d.Invoke();//调用位移入栈操作
}
}
else
{
if (arr[i].ToString() == "-" || arr[i].ToString() == "+")
{
d.Invoke();//调用位移入栈操作
}
}
}
if (arr.Count < 1) { return sb.ToString(); }
foreach (string s in arr)
{
sb.Append(s + " ");
}
return sb.ToString();
};
//调用
Val1 = GetVal1.Invoke(GetVal1.Invoke(GetVal1.Invoke("23 + 14 * 2 ÷ 2").ToString()).ToString()).ToString();