整数解析

时间:2009-11-18 04:24:31

标签: c#

我需要为一个文本框写一个验证,其值为< = 2147483647

我的代码类似于:

Textbox1.Text = "78987162789"

if(Int32.Parse(Textbox1.text) > 2147483647)
{
  Messagebox("should not > ")
}

我收到的错误消息如下:value is too small or too big for Int。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:5)

有一种TryParse方法可以更好地实现这一目的。

int Val;
bool ok = Int32.TryParse (Textbox1.Text, out Val);
if (!ok) { ... problem occurred ... }

答案 1 :(得分:3)

整数使用32位存储,因此您只有32位用于表示数据; 31一旦你考虑到负数。因此,大于2^31 - 1的数字不能表示为整数。该数字是2147483647.因此,自78987162789> 2147483648,它无法将其转换为整数。

尝试使用long代替。

修改

当然,long仅适用于9,223,372,036,854,775,807(2 ^ 63 - 1),因此您可能会遇到同样的问题。因此,正如其他人所建议的那样,使用Int32.TryParse - 如果失败,你可以假设它不是一个数字,或者它比你的限制更大。

答案 2 :(得分:0)

Int64 result;
if (!Int64.TryParse(Textbox1.Text, out result))
{
    // The value is not a number or cannot be stored in a 64-bit integer.
}
else if (result > (Int64)Int32.MaxValue)
{
    // The value cannot be stored in a 32-bit integer.
}

答案 3 :(得分:0)

发生错误是因为78987162789大于2 ^ 31,因此对于Int32来说太大了。如建议的那样,使用TryParse方法,只有在返回true时才会继续。

答案 4 :(得分:0)

您可以使用Validating事件。

private void textbox1_Validating(object sender, CancelEventArgs e)
{
    try
    {
        Int64 numberEntered = Int64.Parse(textBox1.Text);
        if (numberEntered > 2147483647)
        {
            e.Cancel = true;
            MessageBox.Show("You have to enter number up to 2147483647");
        }
    }
    catch (FormatException)
    {
        e.Cancel = true;
        MessageBox.Show("You need to enter a valid integer");
    }
}



    private void InitializeComponent()
    {

        // 
        // more code
        // 
        this.Textbox1.Validating += new System.ComponentModel.CancelEventHandler(this.textbox1_Validating);
    }