private void Oper(object obj,EventArgs ea)
{
Button tmp1=(Button)obj;
strOper=tmp1.Text;
switch (strOper)
{
case "/": //除法运算
if(opt!=NULL&&opt!=DIV)
{
calc();
}
opt = DIV;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
{
if (tmp != 0)
res = res / tmp;
}
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "*":
// 乘法运算
if(opt!=NULL&&opt!=MUL)
{
calc();
} opt = MUL;
if (num!= 0 ) //判断操作数的个数,如果两个就做二元运算
{
if(tmp!=0)
res = res * tmp;
}
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "+": //加法运算
if(opt!=NULL&&opt!=ADD)
{
calc();
}
opt = ADD;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res + tmp;
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "-": //减法运算
if(opt!=NULL&&opt!=SUB)
{
calc();
}
/*if(opt==ADD)
{
res=res+tmp;
tmp=0;
}*/
opt = SUB;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res - tmp;
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "sqrt": //平方根运算
if(opt!=NULL)
{
calc();
} //opt=SQRT;
if (tmp > 0) //要求操作数大于0
{
res = Math.Sqrt(tmp);
//res=tmp;
}
else if(res>0)
res= Math.Sqrt(res);
TextBox1.Text =res.ToString();
num++;
tmp=0;
dot = NODOT;
break; case "1/x": //倒数运算
if(opt!=NULL)
{
calc();
}
if (tmp != 0)
{
res = 1 / tmp;
//res=tmp;
}
else
res=1/res;
TextBox1.Text = res.ToString();
tmp=0;
dot = NODOT;
break;通过修改以上代码,实现上述要求 连加 减 乘 除。还有连等。
{
Button tmp1=(Button)obj;
strOper=tmp1.Text;
switch (strOper)
{
case "/": //除法运算
if(opt!=NULL&&opt!=DIV)
{
calc();
}
opt = DIV;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
{
if (tmp != 0)
res = res / tmp;
}
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "*":
// 乘法运算
if(opt!=NULL&&opt!=MUL)
{
calc();
} opt = MUL;
if (num!= 0 ) //判断操作数的个数,如果两个就做二元运算
{
if(tmp!=0)
res = res * tmp;
}
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "+": //加法运算
if(opt!=NULL&&opt!=ADD)
{
calc();
}
opt = ADD;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res + tmp;
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "-": //减法运算
if(opt!=NULL&&opt!=SUB)
{
calc();
}
/*if(opt==ADD)
{
res=res+tmp;
tmp=0;
}*/
opt = SUB;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res - tmp;
else
res = tmp;
num++;
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "sqrt": //平方根运算
if(opt!=NULL)
{
calc();
} //opt=SQRT;
if (tmp > 0) //要求操作数大于0
{
res = Math.Sqrt(tmp);
//res=tmp;
}
else if(res>0)
res= Math.Sqrt(res);
TextBox1.Text =res.ToString();
num++;
tmp=0;
dot = NODOT;
break; case "1/x": //倒数运算
if(opt!=NULL)
{
calc();
}
if (tmp != 0)
{
res = 1 / tmp;
//res=tmp;
}
else
res=1/res;
TextBox1.Text = res.ToString();
tmp=0;
dot = NODOT;
break;通过修改以上代码,实现上述要求 连加 减 乘 除。还有连等。
标准算法,看书就行.
如果是实际需要计算STRING表达试,
直接交给数据库 一个SELECT就出来了,
没有数据库用 DATATABLE也可以,DATATABLE也支持SELECT
{
Operators = Convert.ToString(ViewState["Operators"]); //将ViewState["Operators"]的值存入Operators中 便于下面的switch语句使用
switch (Operators)
{
case "+":
Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) + Convert.ToDouble(ViewState["in"])); //输出ViewState["out"]和ViewState["in"]所保存的结果并运算
break;
case "-":
Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) - Convert.ToDouble(ViewState["in"]));
break;
case "*":
Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) * Convert.ToDouble(ViewState["in"]));
break;
case "/":
Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) / Convert.ToDouble(ViewState["in"]));
break;
}
}