3

我目前正在用 C# 编写 Shop 程序的代码。我对 C# 比较陌生,我很难让数学在以下代码中起作用:

//Add Basket
public void addBasket()
{
   //Add up the total of individual items
   double total = 0;
   if (shoppingCart.Count() == 0)
   {
      Console.WriteLine("ERROR - Basket is Empty");
   }
   else
   {
      foreach (Products tmp in shoppingCart)
      {
         total = (tmp.Price * tmp.BoughtStock);
         Console.WriteLine("The cost of the individual item  is: " + "\t" +total);
      }
   }
   //Calculate the products together
   double itemTotal = 0;
   if (shoppingCart.Count() == 0)
   {
      Console.WriteLine("ERROR - Basket is Empty");
   }
   else
   {
      foreach (Products tmp in shoppingCart)
      {
         itemTotal = (tmp.Price * tmp.BoughtStock);
         itemTotal = itemTotal + total;
         Console.WriteLine("The cost of the items together is: \t" +itemTotal);
      }
      //Calculate VAT 
      double vatPrice = total * .21;
      double netPriceBeforeDiscount = total + vatPrice;

      //calculate discount: if total cost of shop is over 25 give 10% discount.
      if (netPriceBeforeDiscount >= 25)
      {
         double reducedPrice = netPriceBeforeDiscount * .10;
         double netPrice = netPriceBeforeDiscount - reducedPrice;
         reducedPrice = Math.Round(reducedPrice, 2);
         netPrice = Math.Round(netPrice, 2);

         Console.WriteLine("Discount*:\t\t\t\t " + reducedPrice);
         Console.WriteLine("\nTotal Net Cost (including VAT and discounts):\t      Euro " + netPrice);
      }
      else
      {
         double netPrice = Math.Round(netPriceBeforeDiscount, 2);
      }
   }
}

代码的第一部分工作正常,因为它在篮子中添加任何产品并单独显示价格,问题出现在第二部分,将篮子中的项目价格添加在一起。正如您在输出中看到的那样 http://gyazo.com/1656eecc689b7a9d0bfc47b8480169a6(我必须链接输出的屏幕截图,因为我不知道如何在此处显示 C# 的输出)它显示第一项、第二项的总和,然后正确地将它们两个结果加在一起,尽管我没有不知道为什么它显示第二个项目的成本乘以 2。最后,正如您在代码底部看到的那样,我已经编写了我认为是获取增值税和显示批量折扣的正确方法,但是从上面的链接中,当我使用两个项目时,代码将不会计算或显示增值税或批量折扣尚未在购物篮中有一件商品,请参见此处 >(* 链接编号 1 位于此处 *)。尽管如此,从我的想象来看,错误导致代码的其他部分无法正常工作,

正如我所说,虽然我是新手,而且在 C# 方面并不十分出色,但任何帮助都将不胜感激,如果您需要我的任何帮助,请询问,谢谢

编辑*:刚刚意识到我需要 10 个声望才能发布两个以上的链接,我在下面的评论中链接了 2 个缺失的链接。

4

2 回答 2

8
foreach (Products tmp in shoppingCart)
        {
            total = (tmp.Price * tmp.BoughtStock);

您可能意味着它是total +=,否则您只保留最后一个值。

于 2013-11-07T21:29:30.743 回答
1

你的第二个循环:

        foreach (Products tmp in shoppingCart)
        {
            itemTotal = (tmp.Price * tmp.BoughtStock);
            itemTotal = itemTotal + total;
            Console.WriteLine("The cost of the items together is: \t" +itemTotal);
        }

也很奇怪。itemTotal每次循环时您都会再次覆盖,但随后只需将先前计算的总数添加到此结果中。

我不知道你在这里的意图是什么,所以我很犹豫地建议你只需要+=再次使用 - 但这绝对是错误的。

但是,您的Console.WriteLine声明似乎暗示您希望显示交易中每一行的价格。在这种情况下,您需要执行以下操作:

decimal transactionTotal = 0;
foreach (Products tmp in shoppingCart)
{
    decimal lineTotal = (tmp.Price * tmp.BoughtStock);
    transactionTotal += lineTotal;
    Console.WriteLine("The cost of the items together is: \t" + lineTotal);
}

请注意,我正在使用decimal它,因为这在处理金钱时会产生更一致的结果。

于 2013-11-07T21:35:32.550 回答