如何在减去后防止int变为负数

问题描述 投票:1回答:2

我试图从具有设定值的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显示您已超出您的日期,并且值不会进入否定状态。

实际结果:价值进入负数。

c# winforms math boolean-logic
2个回答
1
投票

您可以使用Math.Max()on指定零作为最低可能值,即执行算术的行:

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
投票

这条线int Holidays_Number = int.Parse(Holidays_Number_lbl.Text);正在设置Holidays_Number的值。然后下一行用if语句检查。但是if声明并没有改变它的价值,它只是检查它。因此,如果它低于0,它将保持低于0。

© www.soinside.com 2019 - 2024. All rights reserved.