C# 整数解析

C# 整数解析,c#,C#,我需要为值2147483648,它无法将其转换为整数 尝试改用long 编辑: 当然,long只适用于9223372036854775807(2^63-1),因此您可能会遇到同样的问题。因此,正如其他人所建议的,使用Int32.TryParse-如果失败,您可以假定它不是一个数字,或者它大于您的限制。您可以使用该事件 当用户在文本框中输入374264364763453764346534653463453535634563635353时?我希望随机输入的数字大于(2^63)-1,否则我看起来会很傻

我需要为值<=2147483647的文本框编写验证

我的代码类似于:

Textbox1.Text = "78987162789"

if(Int32.Parse(Textbox1.text) > 2147483647)
{
  Messagebox("should not > ")
}
我收到了类似这样的错误消息:
值对于Int来说太小或太大
。我怎样才能解决这个问题?

有一种方法更适合这个目的

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

发生此错误的原因是78987162789大于2^31,因此对于Int32来说太大。正如建议的那样,使用该方法,并且只有当它返回true时才继续。整数使用32位存储,因此您只有32位来表示数据;31一旦你考虑到负数。因此,大于
2^31-1
的数字不能表示为整数。这个号码是2147483647。因此,由于78987162789>2147483648,它无法将其转换为整数

尝试改用
long

编辑:

当然,
long
只适用于9223372036854775807(2^63-1),因此您可能会遇到同样的问题。因此,正如其他人所建议的,使用Int32.TryParse-如果失败,您可以假定它不是一个数字,或者它大于您的限制。

您可以使用该事件


当用户在文本框中输入374264364763453764346534653463453535634563635353时?我希望随机输入的数字大于(2^63)-1,否则我看起来会很傻:-)哈。但有一点需要指出——不处理无效或不是数字的输入是无法避免的。也就是说,这是使用
long
而不是
int
的第一个答案。我想你指的是Int32.TryParse,否则,您必须进行另一次检查,以确保数字小于指定的限制。它的堆更长:4587566320000000000000000000000000000000000如果是条件,则
的值是多少?我不理解您的问题。@Chaos:我想他的意思是,“执行额外检查的附加值是多少?”另外,请注意,成功的Int64.TryParse不能保证值是一个数字,正如您的评论所示。nm,我是一个不会阅读的白痴。。。我错过了
在iT64.TyPARSE前面。考虑使用常数,如It32.Max Valm,而不是硬编码它们。@ PaxDabLo-我也想投票,但我没有点。谢谢你的回答。
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.
}
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);
    }