如何在 C# 中减去一个负数?
How to subtract a negative number in C#?
如果我从一个正数中减去一个正数,代码就可以工作。
例如4-1=3
。
问题是当我减去一个负数时,比如 3 - -2
.
这应该等于 5
。
当我在文本框 txt_p7(第二个文本框)中输入“-”时,
它在此代码处显示错误:
txt_result.Text = (Convert.ToInt32(txt_p1.Text) - Convert.ToInt32(txt_p7.Text)).ToString();
这是我使用的代码:
private void txt_p1_TextChanged(object sender, EventArgs e)
{ if ((!string.IsNullOrEmpty(txt_p1.Text)) && (!string.IsNullOrEmpty(txt_p7.Text)))
txt_result.Text = (Convert.ToInt32(txt_p1.Text) - Convert.ToInt32(txt_p7.Text)).ToString();
}
private void txt_p7_TextChanged(object sender, EventArgs e)
{
if ((!string.IsNullOrEmpty(txt_p1.Text)) && (!string.IsNullOrEmpty(txt_p7.Text)))
txt_result.Text = (Convert.ToInt32(txt_p1.Text) - Convert.ToInt32(txt_p7.Text)).ToString();
}
如果没有错误消息,很难判断发生了什么,但据我所知,您在数字完成之前触发了计算。
如果您在 txt_p1 中输入一个值,并尝试在 txt_p7 中输入一个负值,输入“-”将触发计算,因为两个文本框都包含一个字符串。问题是您在没有任何错误检查的情况下转换为整数,因此它试图将“-”转换为导致您失败的整数。
private void txt_p1_TextChanged(object sender, EventArgs e)
{
if ((!string.IsNullOrEmpty(txt_p1.Text)) && (!string.IsNullOrEmpty(txt_p7.Text)))
{
int val1, val2;
//Ensure both are valid integers
if (int.TryParse(txt_p1.Text, out val1) && int.TryParse(txt_p7.Text, out val2))
{
txt_result.Text = (val1 - val2).ToString();
}
}
}
您需要在转换之前验证输入,否则可以输入非数字字符,这将导致 运行 次失败。
你的逻辑在txt_p7_TextChanged()
因此,当您尝试输入“-”时,在您输入任何数字之前,将调用此方法。
Convert.ToInt32(txt_p7.Text)
将抛出错误,因为此时 txt_p7.Text = "-"
不是数字。
在txt_p7_TextChanged()
的开头打个断点,你会看到哪里不对。
试试这个
private void txt_p7_TextChanged(object sender, EventArgs e)
{
int number1, number2;
if (int.TryParse(txt_p1.Text, out number1) && int.TryParse(txt_p7.Text, out number2))
txt_result.Text = (number1 - number2).ToString();
}
如果我从一个正数中减去一个正数,代码就可以工作。
例如4-1=3
。
问题是当我减去一个负数时,比如 3 - -2
.
这应该等于 5
。
当我在文本框 txt_p7(第二个文本框)中输入“-”时, 它在此代码处显示错误:
txt_result.Text = (Convert.ToInt32(txt_p1.Text) - Convert.ToInt32(txt_p7.Text)).ToString();
这是我使用的代码:
private void txt_p1_TextChanged(object sender, EventArgs e)
{ if ((!string.IsNullOrEmpty(txt_p1.Text)) && (!string.IsNullOrEmpty(txt_p7.Text)))
txt_result.Text = (Convert.ToInt32(txt_p1.Text) - Convert.ToInt32(txt_p7.Text)).ToString();
}
private void txt_p7_TextChanged(object sender, EventArgs e)
{
if ((!string.IsNullOrEmpty(txt_p1.Text)) && (!string.IsNullOrEmpty(txt_p7.Text)))
txt_result.Text = (Convert.ToInt32(txt_p1.Text) - Convert.ToInt32(txt_p7.Text)).ToString();
}
如果没有错误消息,很难判断发生了什么,但据我所知,您在数字完成之前触发了计算。
如果您在 txt_p1 中输入一个值,并尝试在 txt_p7 中输入一个负值,输入“-”将触发计算,因为两个文本框都包含一个字符串。问题是您在没有任何错误检查的情况下转换为整数,因此它试图将“-”转换为导致您失败的整数。
private void txt_p1_TextChanged(object sender, EventArgs e)
{
if ((!string.IsNullOrEmpty(txt_p1.Text)) && (!string.IsNullOrEmpty(txt_p7.Text)))
{
int val1, val2;
//Ensure both are valid integers
if (int.TryParse(txt_p1.Text, out val1) && int.TryParse(txt_p7.Text, out val2))
{
txt_result.Text = (val1 - val2).ToString();
}
}
}
您需要在转换之前验证输入,否则可以输入非数字字符,这将导致 运行 次失败。
你的逻辑在txt_p7_TextChanged()
因此,当您尝试输入“-”时,在您输入任何数字之前,将调用此方法。
Convert.ToInt32(txt_p7.Text)
将抛出错误,因为此时 txt_p7.Text = "-"
不是数字。
在txt_p7_TextChanged()
的开头打个断点,你会看到哪里不对。
试试这个
private void txt_p7_TextChanged(object sender, EventArgs e)
{
int number1, number2;
if (int.TryParse(txt_p1.Text, out number1) && int.TryParse(txt_p7.Text, out number2))
txt_result.Text = (number1 - number2).ToString();
}