我正在使用这段代码来使用正则表达式来运算符:
string[] num = Regex.Split(calcu.Text, @"\-|\+|\*|\/").Where(s => !String.IsNullOrEmpty(s)).ToArray();
string[] op = Regex.Split(calcu.Text, @"\d{1,3}").Where(s => !String.IsNullOrEmpty(s)).ToArray();
double numCtr = 0, lastVal = 0;
string lastOp = "";
foreach (string n in num)
{
numCtr++;
if (numCtr == 1)
{
lastVal = double.Parse(n);
}
else
{
if (!String.IsNullOrEmpty(lastOp))
{
switch (lastOp)
{
case "+":
lastVal = lastVal + double.Parse(n);
break;
case "-":
lastVal = lastVal - double.Parse(n);
break;
case "*":
lastVal = lastVal * double.Parse(n);
break;
case "/":
lastVal = lastVal / double.Parse(n);
break;
}
}
}
double opCtr = 0;
foreach (string o in op)
{
opCtr++;
if (opCtr == numCtr)
{
lastOp = o;
break;
}
}
}
calcu.Text = lastVal.ToString();
如果添加20.5 + 2.5,则选择数字中的句点,返回的答案为20.5,但如果我使用20 + 5.5,则结果为25.5。
如果我使用20 + 7.5 + 20 + 5.5,结果是正确的。
我只是不知道如何取消选择这段时间,这样我就可以随时随地进行操作。
答案 0 :(得分:-1)
我使用此代码并将其替换为数组
string value = calcu.Text;
char[] delimiters = new char[] { '+', '-', '*', '/' };
string[] parts = value.Split(delimiters);
string[] signs = Regex.Split(value, "[0-9]|\\.").Where(s => !String.IsNullOrEmpty(s)).ToArray(); ;
float numCtr = 0, lastVal = 0;
string lastOp = "";
foreach (string n in parts)
{
numCtr++;
if (numCtr == 1)
{
lastVal = float.Parse(n);
}
else
{
if (!String.IsNullOrEmpty(lastOp))
{
switch (lastOp)
{
case "+":
lastVal = lastVal + float.Parse(n);
break;
case "-":
lastVal = lastVal - float.Parse(n);
break;
case "*":
lastVal = lastVal * float.Parse(n);
break;
case "/":
lastVal = lastVal / float.Parse(n);
break;
}
}
}
float opCtr = 0;
foreach (string o in signs)
{
opCtr++;
if (opCtr == numCtr)
{
lastOp = o;
break;
}
}
}
calcu.Text = lastVal.ToString();
它有效,