我正在尝试从具有设定值的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,表明您已经超过工作天数,价值也不会下降。
实际结果:价值变为负数。
答案 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))
{
...