计算折扣价

Kao*_*oru 3 c# winforms

我想让我的应用程序计算折扣价。这是我找到折扣价的方法,但是我有一个小问题(逻辑问题):

private void UpdateDiscount(object sender, EventArgs e)
{
    decimal actualPrice = 0;
    decimal discount = 0;
    int calculateDiscount = 0;
    int totalDiscount = 0;
    int afterDiscount = 0;
    int totalAfterDiscount = 0;
    int total = 0;

    if (numericTextBox1.TextLength == 6)
    {
        this.numericUpDown2.Enabled = true;

        discount = Convert.ToInt32(this.numericUpDown2.Value);

        calculateDiscount = Convert.ToInt32(discount / 100);

        totalDiscount = calculateDiscount;

        if (!string.IsNullOrEmpty(this.numericTextBox3.Text.ToString()))
        {
            actualPrice = Convert.ToDecimal(this.numericTextBox3.Text);
        }

        else
        {
            numericTextBox3.Text = "";
        }

        afterDiscount = Convert.ToInt32(actualPrice * totalDiscount);
        totalAfterDiscount = Convert.ToInt32(actualPrice);
        total = Convert.ToInt32(totalAfterDiscount - afterDiscount);

        if (numericUpDown2.Value > 0)
        {
            this.numericTextBox6.Text = total.ToString();
        }
    }

    else if (numericTextBox1.TextLength != 6)
    {
        this.numericUpDown2.Enabled = false;

        this.numericUpDown2.Value = 0;
        this.numericTextBox6.Text = "";
    }

    else
    {
        actualPrice = 0;
        discount = 0;
        calculateDiscount = 0;
        totalDiscount = 0;
        afterDiscount = 0;
        totalAfterDiscount = 0;
        total = 0;

        MessageBox.Show("There is no data based on your selection", "Error");
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是结果,即使我已经给了折扣值,折扣后的总数仍与总价格相同。

在此处输入图片说明

Nic*_*rey 5

给定

  • 价格P这样0 <= P,和
  • 一个折扣百分比D,从而0 <= D <= 100

您可以计算MD需要应用的折扣(降价)

MD = P * (D/100)
Run Code Online (Sandbox Code Playgroud)

然后,您可以得到折扣价DP

DP = P - MD
Run Code Online (Sandbox Code Playgroud)

鉴于此,您应该这样做:

public static class DecimalHelpers
{
  public static decimal ComputeDiscountedPrice( this decimal originalPrice , decimal percentDiscount )
  {
    // enforce preconditions
    if ( originalPrice   <   0m ) throw new ArgumentOutOfRangeException( "originalPrice"   , "a price can't be negative!"    ) ;
    if ( percentDiscount <   0m ) throw new ArgumentOutOfRangeException( "percentDiscount" , "a discount can't be negative!" ) ;
    if ( percentDiscount > 100m ) throw new ArgumentOutOfRangeException( "percentDiscount" , "a discount can't exceed 100%"  ) ;

    decimal markdown        = Math.Round( originalPrice * ( percentDiscount / 100m) , 2 , MidpointRounding.ToEven ) ;
    decimal discountedPrice = originalPrice - markdown ;

    return discountedPrice ;
  }
}
Run Code Online (Sandbox Code Playgroud)