2009-11-18 59 views
3

我需要寫一個驗證的文本框,其值是< = 2147483647整數解析

我的代碼是一樣的東西:

Textbox1.Text = "78987162789" 

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

我收到錯誤信息是這樣的:value is too small or too big for Int。我怎樣才能解決這個問題?

+0

考慮使用常量,如int32.MaxValue而不是硬編碼它們。 – MPelletier 2009-11-18 04:41:13

回答

5

有一種TryParse方法更適合於此目的。發生

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

你錯過了第二個參數的「出」... – 2009-11-18 04:34:58

+0

@paxdiablo - 我想投票也可以,但我沒有積分。感謝您的回答。 – SattiS 2009-11-18 18:20:24

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. 
} 
+0

'else if'條件的價值是什麼? – 2009-11-18 04:29:51

+0

我不明白你的問題。 – ChaosPandion 2009-11-18 04:30:35

+0

@Chaos:我認爲他的意思是,「執行額外檢查的附加價值是什麼?」另外請注意,成功的Int64.TryParse並不能保證該值是一個數字,正如您的評論所暗示的那樣。 – 2009-11-18 04:32:46

0

的錯誤,因爲78987162789大於2^31,所以它太大了一個Int32。如建議的那樣,使用TryParse方法,並且只有在它返回true時才繼續。

3

整數使用32位存儲,所以您只能用32位來表示您的數據; 31一旦你考慮到負數。所以大於2^31 - 1的數字不能表示爲整數。該號碼是2147483647.因此,因爲78987162789> 2147483648,它不能將其轉換爲整數。

嘗試使用long代替。

編輯:

當然,long只能達到9,223,372,036,854,775,807(2^63 - 1),這樣你就可以在同樣的問題結束了。所以,正如其他人所建議的那樣,使用Int32.TryParse - 如果失敗了,你可以認爲它不是一個數字,或者它大於你的限制。

+1

+1 for'long' ... – 2009-11-18 04:28:00

+0

而當用戶輸入3742643647634537643465346534634535453563453563635353進入文本框? – paxdiablo 2009-11-18 04:29:32

+0

我希望隨機輸入的數字大於(2^63)-1,否則我會看起來很愚蠢:-) – paxdiablo 2009-11-18 04:30:25

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