如何在循环中添加两个货币值

时间:2016-06-08 18:02:13

标签: c#

我有以下foreach循环

            //Get the count of the service records (tickets) and display
        int t = 1;
        decimal Total = 0;

        foreach (dtIService_v10_r1.Ticket objTicket in mobjTickets)
        {
            //All service tickets that are marked "Repair Orders"
                if (objTicket.TicketStage_ID == 2)
                {
                    vm.NumberRepOrder = mobjFormat.StripObjectToString(t++);
                    int x = Convert.ToInt32(vm.NumberRepOrder);

                    for (int i = 0; i < x; i++)
                    {
                        Total += (objTicket.PartSubTotal + objTicket.LaborSubtotal);
                    }
                }

        }

        vm.RepairCost = mobjFormat.FormatObjectToCurrencyString(Total);

我需要做的是找到每个服务记录的LaborSubtotal + PartSubTotal,然后显示总数。例如,如果我每张5.00有20张票,则vm.RepairCost应显示$ 100.00。我从上面的代码得到的只是最终记录总数。

顺便说一句mobjFormat是我们正在使用的帮手,所以不要担心它不会影响代码。

2 个答案:

答案 0 :(得分:2)

此代码中至少存在一个语义错误。尝试通过在循环外移动总结和总计分配来修复:

//Get a) count and b) total cost of the service records (tickets) and display
int CountOfServiceTickets = 0;
decimal Total = 0;
foreach (dtIService_v10_r1.Ticket objTicket in mobjTickets)
{
    //All service tickets that are marked "Repair Orders" (2)
    if (objTicket.TicketStage_ID == 2)
    {
        ++CountOfServiceTickets;
        Total += (objTicket.PartSubTotal + objTicket.LaborSubtotal);
    }
}
vm.NumberRepOrder = mobjFormat.StripObjectToString(CountOfServiceTickets);
vm.RepairCost = mobjFormat.FormatObjectToCurrencyString(Total);

在此版本中,我认为vm是您的“总容器”,如果您在有关xvm范围的问题中添加更多信息,我可能会进行修改,以及NumberRepOrder的目标是。

我将sTotal重命名为Total,否则它看起来像匈牙利表示法类型不匹配。转换为字符串稍后执行,只有一次,当小数和已知时。

编辑:OP澄清。相应更新。现在,循环计算一个计数和一个故障子集的总成本。它不再试图将分形作为副作用;)

答案 1 :(得分:2)

如果我做对了,你想要的只是获得所有门票的总数。如果这是你真正想要的,那么所有人都需要这样做:
decimal total = mobjTickets.Sum(x => x.PartSubTotal + x.LaborSubtotal);
不需要循环但它需要“使用System.Linq;”指令