在减去

时间:2019-04-27 17:57:10

标签: c# winforms math boolean-logic

我正在尝试从具有设定值的int中减去一个值。一旦它变为0,然后从中减去更多,则该值将变为负数。

我认为,如果我使用if-else语句检查该值是否低于0,它将防止该值变为负数。但是价值变成负数。如何防止该值进入负数范围?

        {
            DateTime start = dateTimePicker2.Value.Date;
            DateTime end = dateTimePicker1.Value.Date;

            TimeSpan difference = end - start;

            int days = difference.Days;
            int min = 0;
            int max = 21;
            int rdays = Convert.ToInt32(Holidays_Number_lbl.Text);
            Holidays_Number_lbl.Text = (rdays - days).ToString();

            int Holidays_Number = int.Parse(Holidays_Number_lbl.Text);
            if ((Holidays_Number > min)  && (Holidays_Number < max))
            {
                MessageBox.Show("Holidays have been counted");
            }
            else
            {
                MessageBox.Show(" You have exceeded your 21 holidays  ");//value goes into the minus ?
            }
        }

预期结果:出现MessageBox,表明您已经超过工作天数,价值也不会下降。

实际结果:价值变为负数。

2 个答案:

答案 0 :(得分:1)

此行int Holidays_Number = int.Parse(Holidays_Number_lbl.Text);设置Holidays_Number的值。然后,下一行使用if语句进行检查。但是if语句不会更改值,它只会检查它。因此,如果它小于0,它将保持在0以下。

答案 1 :(得分:1)

您可以在执行算术的行上用Math.Max()将零指定为最低值:

Holidays_Number_lbl.Text = (Math.Max(rdays - days, 0)).ToString();

但是,您要转换为字符串,然后再转换为数字。这样的事情将消除对int.Parse的需求:

...

 int Holidays_Number = Math.Max(rdays - days, 0);
 Holidays_Number_lbl.Text = Holidays_Number.ToString();
 if ((Holidays_Number > min)  && (Holidays_Number < max))
 {

...