Как я могу предотвратить Int становится отрицательным после вычитания - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь вычесть значение из 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, сообщающий, что вы превысили свои дни, и значение не переходит в отрицательное значение.

ActualРезультат: значение переходит в отрицательное значение.

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Вы можете указать ноль в качестве наименьшего возможного значения с помощью 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))
 {

...

1 голос
/ 27 апреля 2019

Эта строка int Holidays_Number = int.Parse(Holidays_Number_lbl.Text); устанавливает значение Holidays_Number. Затем следующая строка проверяет это с помощью оператора if. Но оператор if не меняет значение, он просто проверяет его. Поэтому, если оно ниже 0, оно останется ниже 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...