2017-04-20 58 views
0

我不知道爲什麼,但比較兩個值時我得到FormatException。有人能告訴我我做錯了什麼嗎?我已經試圖讓這兩個值浮動,但相同的異常...爲什麼在比較int和float值時會出現格式異常?

float label1 = float.Parse(label15.Text); 
int box1 = int.Parse(textBox23.Text); 

if (label1 <= box1) 
{ 
    //Do things" 
} 
+2

從[這裏](https://www.dotnetperls.com/debugging)開始。 – Sinatr

+4

比較int和float值時,您沒有得到格式異常。當'label15'中的字符串不能作爲數字解析時,您會得到一個格式異常。關於你對細節的關注,關於你的代碼中的哪一行拋出異常,互聯網上的陌生人比你知道的更多? –

+1

您在該文本框中輸入了什麼值? –

回答

1

你已經在一個角落裏,而沒有使用適當的異常處理。

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中,以確定造成任何異常的原因並生成輸出,但您永遠不希望這樣做來管理您的邏輯流。你會用它來解決這個問題,以及我發佈的可能的解決方案。

2

FormatException

時引發一種論點的格式 無效,或者當複合格式異常字符串結構不正確。

錯誤是因爲無論label15/textBox23的值是多少,它都不是有效數字。

使用float.TryParseint.TryParse分別,因爲他們不拋出異常:

float label1; 
if(label15.Text, out label1){ 
    // do something 
} 

int box1; 
if(textBox23.Text, out box1){ 
    // do something 
} 

不過,你仍然需要確保label15/textBox23是一個可分析的價值,否則調控不會裏面的if去聲明。

1

float.Parse方法可以採取第二個參數。

假設您正在尋找德國號碼根據您的個人資料解析。

所以,如果你想分析德國的數字格式,請確保該方法知道(因爲按照美國標準,「2,5」是不是一個浮點數......有沒有連啓動用)。

從理論上講,你的System.Globalization.CultureInfo.CurrentCulture應該已經是你需要的。如果不是的話,你可以創建你需要一個文化:

這應該很好地工作:

float f = float.Parse("2,5", new System.Globalization.CultureInfo("de-DE")) 

請記住,儘管你盡了最大努力,人們可能還只是在文本框中輸入垃圾,所以你應該留意其他答案中提到的TryParse。但即使在那裏:小心正確的文化來解析你的數字。

+0

謝謝你回答我的問題,也感謝你糾正我的問題,下次我會做得更好!Danke :) –

相關問題