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

本文关键字:文本 计算 执行 何轻松 运算符 如果 | 更新日期: 2023-09-27 18:08:22

作为会计助理,我的部分工作要求我为发票上的各种项目分配费用组。例如,如果一家办公用品公司给我们寄来一些商品,我可能不得不把复印纸和笔分开,并把它们分别归类到不同的费用组。

将费用组中的金额划分为总运费和税收金额是一项繁琐的操作,但我决定通过编写一个程序来更聪明地工作,该程序可以根据输入:items[], shipping, tax来为我调整金额。这真是太神奇了,真的减少了我做这些任务所需的时间。

然而,我想实现一个excel风格的功能,我可以在文本框中有+和-操作符,这将允许我很容易地在一行中添加类似的项目。(例如,笔、尖笔、记事本,它们都在发票上的单独行上,都需要计算并作为一个金额返回。)

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

我曾经在Excel的VBA中写过这个,它本身允许这样做,但它感觉不如我自定义的东西好。

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

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

这将给你一个数字数组(你需要将它们转换为double)和一个符号数组(也会有一些空元素,你应该忽略它们。

只需遍历它们并使用开关进行实际的数学运算。

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

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;
}

希望对你有帮助。