C#中的数学错误

时间:2013-11-07 21:25:52

标签: c# math

我目前正在用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 *)。尽管如此,从我想象的是导致代码的其他部分无法正常工作的错误,当我只做一个项目尽管正确计算增值税和批量折扣并显示正确答案时,它会将单个项目成本乘以金额我买的产品,请看这里> (*下面的链接号码2 *)

正如我所说,虽然我是新手,并且在C#上并不是很出色,但任何帮助都会非常感激,如果你需要我的任何东西,请问,谢谢

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分: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可以在处理资金时提供更一致的结果。