如何在没有周期的情况下进行算术运

时间:2015-02-24 02:50:04

标签: c# regex

我正在使用这段代码来使用正则表达式来运算符:

    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,结果是正确的。

我只是不知道如何取消选择这段时间,这样我就可以随时随地进行操作。

1 个答案:

答案 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();

它有效,