如果找到运算符,如何轻松解析文本框以执行计算?

时间:2013-04-10 14:27:35

标签: c# parsing operators

我作为会计相关人员的部分工作要求我将费用组分配给发票上的各个项目。例如,如果办公用品公司向我们发送了一些商品,我可能需要将复印纸与钢笔分开,并将其编码为不同的费用组。

将相同费用组中的金额除以整体运费和税额是一项繁琐的操作,但我决定通过编写一个程序来更聪明地工作,该程序会根据输入调整金额:items [],shipping,税。这就像一个魅力,真的减少了我完成这些任务所需的时间。

但是,我想实现Excel风格的功能,我可以在文本框中添加+和 - 运算符,这样我就可以在一行中轻松添加相同的项目。 (即笔,锐利,记事本,它们都在发票上的单独行上,都需要计算并作为一笔总和返还。)

我目前正在使用txtValue.Text并将其转换为双倍以执行计算。我希望能够解析该Text值并评估输入的语句。如果我可以浏览一张发票并输入16.49+22.38+47.06并知道当我点击我的计算按钮时一切都会好的话,那么这将节省我在计算器上将它们加在一起的时间。

我曾经在VBA for Excel中写过一次这本身就允许这样做,但它并不像我定制的那样好。

2 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题。这是我提出的一个粗略的解决方案。可能还有十几种更优雅的方法可以解决它。

public double Parse(string input)
{
    char lastoperator = '0';
    double result = 0;
    for (int i = 0; i < input.Length; i++)
    {
        string temp = "";
        if (char.IsDigit(input[i]) || input[i] == '.')
            temp += input[i];
        else if(input[i] == '+' || input[i] == '-')
        {
            double val;
            if(double.TryParse(temp, out val))
            {
                if(lastoperator == '+')
                    result += val;
                else if(lastoperator == '-')
                    result -= val;
                else
                    result = val;

                lastoperator = input[i];
                temp = "";
            }
            //else error
        }
        else
            continue;
    }
    return result;
}

希望有所帮助。

答案 1 :(得分:2)

        string value = "1.2+5.3-1";
        char[] delimiters = new char[] { '+', '-' };
        string[] parts = value.Split(delimiters);
        string[] signs =  Regex.Split(value, "[0-9]|\\.");

这将为您提供一组数字(您需要将它们转换为double)和一组符号(还有一些空元素,您应该忽略它们。

只需迭代它们并使用开关执行实际的数学运算。