0

我作为会计助理的部分工作要求我将费用组分配给发票上的各种项目。例如,如果一家办公用品公司向我们发送了一些商品,我可能必须将复印纸与笔分开,并将它们编码到不同的费用组中。

将类似费用组中的金额划分为总运费和税金金额是一项繁琐的操作,但我决定通过编写一个程序来更聪明地工作,该程序将根据输入为我调整金额:项目 []、运费、税金。这就像一种魅力,确实减少了我完成这些任务所需的时间。

但是,我想实现一个 Excel 风格的功能,这样我可以在文本框中使用 + 和 - 运算符,这样我就可以轻松地将类似的项目添加到一行中。(即钢笔、记事本、记事本,它们都将在发票的不同行上,都需要计算并作为一个总和返回。)

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

我在 VBA for Excel 中写过一次,它本机允许这样做,但感觉不如我定制的东西好。

4

2 回答 2

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

希望有帮助。

于 2013-04-10T14:45:05.400 回答
2
        string value = "1.2+5.3-1";
        char[] delimiters = new char[] { '+', '-' };
        string[] parts = value.Split(delimiters);
        string[] signs =  Regex.Split(value, "[0-9]|\\.");

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

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

于 2013-04-10T14:52:18.660 回答