Marcus Marcus - 21 days ago 8
C# Question

How is this parameter changing its value?

int temp;
res = int.TryParse(discountTextBox.Text, out temp);

if (res == false)
{
MessageBox.Show("Enter Discount in integers", "Error");

return;
}
double Discount = (double) temp;
if (!transactiondao.ValidateDiscount(curremployee, Discount, retail))
{
MessageBox.Show("Invalid Discount entered", "error");
return;
}


Above block of code calls the method below. However, while debugging discount has the value that user specified. After the if block is executed however, it changes to 0.

public bool ValidateDiscount(Employee emp, double GivenDiscount, int retailprice)
{
bool res = false;
double sMaxDiscount = emp.GetAuthorizedMaxDiscount();

//validating against retail price
double rMaxDiscount;
if (retailprice == 2000)
rMaxDiscount = 4;
else if (retailprice == 3000)
rMaxDiscount = 5;
else if (retailprice == 4000)
rMaxDiscount = 8;
else
rMaxDiscount = -1;

double MaxDiscount;
if (sMaxDiscount >= rMaxDiscount)
MaxDiscount = sMaxDiscount;
else
MaxDiscount = rMaxDiscount;

if (GivenDiscount < MaxDiscount)
{
res = true;
}

return res;
}


here is the call to ValidateDiscount. commenting out the if block and thus bypassing validatediscount works perfectly and discount retains the value entered by user. How does this happen?

Answer

You declared temp as an int, later you cast temp as a double. This won't give the desired result. Try this.

double temp;
res = double.TryParse(discountTextBox.Text, out temp);