如何在C#中减去负数?

时间:2015-11-20 01:56:52

标签: c# parsing numbers

如果我从正数中减去正数,则代码可以正常工作。

例如,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();
    }

2 个答案:

答案 0 :(得分:2)

您的逻辑位于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();
    }

答案 1 :(得分:1)

如果没有错误消息,很难说出发生了什么,但从我可以看到你在数字完成之前触发计算。

如果在txt_p1中输入一个值,并尝试在txt_p7中输入负值,则输入' - '将触发计算,因为两个文本框都包含字符串,因此满足if条件。问题是你在没有任何错误检查的情况下转换为整数,因此它试图将' - '转换为导致失败的整数。

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();
            }
        }
    }

您需要在转换之前验证输入,否则可以输入非数字字符,这将导致运行时失败。