我需要寫一個驗證的文本框,其值是< = 2147483647整數解析
我的代碼是一樣的東西:
Textbox1.Text = "78987162789"
if(Int32.Parse(Textbox1.text) > 2147483647)
{
Messagebox("should not > ")
}
我收到錯誤信息是這樣的:value is too small or too big for Int
。我怎樣才能解決這個問題?
我需要寫一個驗證的文本框,其值是< = 2147483647整數解析
我的代碼是一樣的東西:
Textbox1.Text = "78987162789"
if(Int32.Parse(Textbox1.text) > 2147483647)
{
Messagebox("should not > ")
}
我收到錯誤信息是這樣的:value is too small or too big for Int
。我怎樣才能解決這個問題?
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.
}
'else if'條件的價值是什麼? – 2009-11-18 04:29:51
我不明白你的問題。 – ChaosPandion 2009-11-18 04:30:35
@Chaos:我認爲他的意思是,「執行額外檢查的附加價值是什麼?」另外請注意,成功的Int64.TryParse並不能保證該值是一個數字,正如您的評論所暗示的那樣。 – 2009-11-18 04:32:46
的錯誤,因爲78987162789大於2^31,所以它太大了一個Int32。如建議的那樣,使用TryParse方法,並且只有在它返回true時才繼續。
整數使用32位存儲,所以您只能用32位來表示您的數據; 31一旦你考慮到負數。所以大於2^31 - 1
的數字不能表示爲整數。該號碼是2147483647.因此,因爲78987162789> 2147483648,它不能將其轉換爲整數。
嘗試使用long
代替。
編輯:
當然,long
只能達到9,223,372,036,854,775,807(2^63 - 1),這樣你就可以在同樣的問題結束了。所以,正如其他人所建議的那樣,使用Int32.TryParse - 如果失敗了,你可以認爲它不是一個數字,或者它大於你的限制。
您可以使用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);
}
考慮使用常量,如int32.MaxValue而不是硬編碼它們。 – MPelletier 2009-11-18 04:41:13