2013-11-07 4 views
3

В настоящее время я пишу код для программы магазина в C#. Я относительно новым для C# и у меня возникли трудности в получении математику, чтобы работать в следующем фрагменте кода:Математические ошибки в 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# здесь). Он отображает общее количество первого элемента, второго элемента, а затем правильно добавляет его два результата вместе, хотя я не знаю, почему он отображает стоимость второго предмета, умноженного на два. Наконец, как вы можете видеть внизу кода, я написал то, что, по моему мнению, является правильным способом получения НДС и отображения массовой скидки, но из ссылки выше, когда я использую два элемента, код не будет вычислять или отображать НДС или наличный дисконт еще с одним товаром в корзине, см. Здесь> (* Ссылка № 1 Ниже здесь *). Опять же, из того, что я себе представляю, является ошибка, приводящая к тому, что другие части кода не работают должным образом, когда я делаю только один элемент, несмотря на то, что правильно вычисляет ват и объемные скидки и отображает правильный ответ, он умножает стоимость отдельных предметов на сумму о продукте, который я купил, см. здесь> (* Ссылка № 2 Ниже здесь *)

Как я уже сказал, но я новичок в этом и хорошо не очень хорош на C#, но любая помощь будет очень признательна, и если вам потребуется что-нибудь от меня, просто спросите, спасибо

Редактировать *: Только что понял, мне нужно 10 репутации, чтобы разместить более двух ссылок, я свяжу 2 недостающих ссылки в комментариях ниже.

+0

Ссылка номер 1> http://gyazo.com/cd9b1a3b6f995e9f155d7897a8e67a8a – JasonL95

+0

Ссылка номер 2> http://gyazo.com/3f51fa4d4b607dd9997c18e5aaac79ac – JasonL95

+7

Помимо всего прочего - не использовать 'double' для денежных значений - используйте' десятичную '. –

ответ

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

Вы, наверное, имели в виду, чтобы это было total +=, в противном случае вы только хранение последнего значения.

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, поскольку это дает более стабильные результаты при работе с деньгами.

+0

Хорошо, извините за мой плохой код и описание, что я делаю здесь, это добавить цены всех отдельных итогов в моем первом цикле, чтобы я мог получить общую стоимость для клиента. <Надеюсь, это объяснит, что я пытаюсь сделать немного лучше – JasonL95

Смежные вопросы