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

How do I prevent an int from becoming negative after subtracting

提问人:Johnathan 提问时间:4/28/2019 最后编辑:Trevor ReidJohnathan 更新时间:4/28/2019 访问量:2272

问:

我正在尝试从具有设定值的值中减去一个值。一旦它达到 0 并且我从中减去更多,该值就会变为负数。int

我想如果我使用语句来检查值是否低于 0,它会防止该值变为负数。但该值继续变为负数。如何防止该值进入负值范围?if-else

        {
            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 数学 布尔逻辑

评论

0赞 Charles May 4/28/2019
您可以检查它是否低于 0 并显示消息框,但您还需要将其设置为 0。if(val < 0){ val = 0;}
1赞 LarsTech 4/28/2019
Holidays_Number_lbl.Text = Math.Max(0, rdays - days).ToString();仅当需要显示内容时才将其转换为字符串。
0赞 Tim 4/28/2019
设置后检查值,因此检查时为负数。

答:

1赞 Tim 4/28/2019 #1

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

3赞 Trevor Reid 4/28/2019 #2

您可以在执行算术的行上指定零作为可能的最小值: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))
 {

...