我不知道爲什麼,但比較兩個值時我得到FormatException
。有人能告訴我我做錯了什麼嗎?我已經試圖讓這兩個值浮動,但相同的異常...爲什麼在比較int和float值時會出現格式異常?
float label1 = float.Parse(label15.Text);
int box1 = int.Parse(textBox23.Text);
if (label1 <= box1)
{
//Do things"
}
我不知道爲什麼,但比較兩個值時我得到FormatException
。有人能告訴我我做錯了什麼嗎?我已經試圖讓這兩個值浮動,但相同的異常...爲什麼在比較int和float值時會出現格式異常?
float label1 = float.Parse(label15.Text);
int box1 = int.Parse(textBox23.Text);
if (label1 <= box1)
{
//Do things"
}
你已經在一個角落裏,而沒有使用適當的異常處理。
float label1 = float.Parse(label15.Text); //problem 1
int box1 = int.Parse(label15.Text); //problem 2
if (label1 <= box1) //problem 3
{
//Do things"
}
問題1和問題2是您無法確保您的UI爲您提供可解析的值。這會拋出異常。問題3是因爲你不知道你的解析是否成功,你不知道你是否可以進行比較。嘗試TryParse()
。
float label1 = 0;
int box1 = 0;
if(float.TryParse(label15.Text, out label1)
&& int.TryParse(label15.Text, out box1))
{
if (label1 <= box1)
{
//Do things"
}
}
的TryParse()
函數填充現有的變量作爲out
參數,但返回bool
。如果解析失敗,則返回false
,並允許代碼繼續。通過使這些條件成功,我們完全避開了錯誤。
您也可以始終將您的代碼包裝在try-catch block
中,以確定造成任何異常的原因並生成輸出,但您永遠不希望這樣做來管理您的邏輯流。你會用它來解決這個問題,以及我發佈的可能的解決方案。
時引發一種論點的格式 無效,或者當複合格式異常字符串結構不正確。
錯誤是因爲無論label15
/textBox23
的值是多少,它都不是有效數字。
使用float.TryParse
和int.TryParse
分別,因爲他們不拋出異常:
float label1;
if(label15.Text, out label1){
// do something
}
int box1;
if(textBox23.Text, out box1){
// do something
}
不過,你仍然需要確保label15
/textBox23
是一個可分析的價值,否則調控不會裏面的if
去聲明。
float.Parse方法可以採取第二個參數。
假設您正在尋找德國號碼根據您的個人資料解析。
所以,如果你想分析德國的數字格式,請確保該方法知道(因爲按照美國標準,「2,5」是不是一個浮點數......有沒有連點啓動用)。
從理論上講,你的System.Globalization.CultureInfo.CurrentCulture
應該已經是你需要的。如果不是的話,你可以創建你需要一個文化:
這應該很好地工作:
float f = float.Parse("2,5", new System.Globalization.CultureInfo("de-DE"))
請記住,儘管你盡了最大努力,人們可能還只是在文本框中輸入垃圾,所以你應該留意其他答案中提到的TryParse。但即使在那裏:小心正確的文化來解析你的數字。
謝謝你回答我的問題,也感謝你糾正我的問題,下次我會做得更好!Danke :) –
從[這裏](https://www.dotnetperls.com/debugging)開始。 – Sinatr
比較int和float值時,您沒有得到格式異常。當'label15'中的字符串不能作爲數字解析時,您會得到一個格式異常。關於你對細節的關注,關於你的代碼中的哪一行拋出異常,互聯網上的陌生人比你知道的更多? –
您在該文本框中輸入了什麼值? –