2014-03-03 85 views
1

我今天第一次開始使用c#。我最近一直在使用Delphi Quite。無論如何,我試圖做一個程序,檢查你的標記是否等於或大於75%,如果是的話,標籤將標題You shall receive a bursary!,等等。有三個文本框爲三個不同的組的標記,即IT,數學和科學。他們都是出來的150簡單的算術建議

這裏的算術:

Average = (((Maths/150)*100)+((IT/150)*100)+((Science/150)*100))/3; 

的問題是,標籤不顯示任何東西,如果所有給定的標記是140/150其中= 93%,它不該」 t顯示任何東西,如果它低於75%。

我的代碼的其餘部分:

private void button1_Click(object sender, EventArgs e) 
     { 
      string Name; 
      string Surname; 
      int Maths; 
      int Science; 
      int IT; 
      float Average; 


      Name = edtName.Text; 
      Surname = edtSurname.Text; 
      Maths = int.Parse(edtMaths.Text); 
      Science = int.Parse(edtScience.Text); 
      IT = int.Parse(edtIT.Text); 
      Average = (((Maths/150)*100)+((IT/150)*100)+((Science/150)*100))/3; 

      if (Average >= 75) 
      { 
       lblOutput.Text += "You shall recieve a bursary!"; 
      } 

請幫我更正一下,我做錯了,

謝謝:)

+0

你應該把你的數學方程分成多個部分,並使用調試器(我們的輸出到控制檯)讓你看到發生了什麼。 – Jake1164

+0

您絕對應該深入瞭解數據綁定,對象和屬性,它會讓您的生活變得更輕鬆!順便說一句:當平均值<75時,你應該清空你的標籤。你可以用else來擴展你的if語句,並設置lblOutput.Text =「」; – Robert

回答

6

當你有整數算術的140/150師給你0

從C#7.7.2 Division operator整數除法:

劃分舍入結果趨向於零,而 絕對值的結果是最大可能的整數,它是小於的商的 絕對值兩個操作數。當兩個操作數具有相同的符號和零時結果爲零,或者當兩個操作數具有相反的符號時爲負,或者爲 。

如果你想要有90%(即0.9),那麼你應該使用浮點除法:

Average = (((Maths/150F)*100)+((IT/150F)*100)+((Science/150F)*100))/3; 

此外,我建議創建命名常量(S),這說明150幻數(S )。

+0

非常感謝Sergey! –

2
private void button1_Click(object sender, EventArgs e) 
     { 
      string Name; 
      string Surname; 
      int Maths; 
      int Science; 
      int IT; 
      float Average; 


      Name = edtName.Text; 
      Surname = edtSurname.Text; 
      Maths = int.Parse(edtMaths.Text); 
      Science = int.Parse(edtScience.Text); 
      IT = int.Parse(edtIT.Text); 
      Average = ((((float)Maths/150.0)*100)+(((float)IT/150.0)*100)+(((float)Science/150.0)*100))/3; 

      if (Average >= 75) 
      { 
       lblOutput.Text += "You shall recieve a bursary!"; 
      } 

嘗試

+0

永遠比'浮動'更喜歡'雙'。 ''Maths/150.0'已經足夠了。 –

+0

right man ....... @ Henk –

+0

是不是十進制好? –

3

因爲你所做的是這裏所謂的integer division。它總是捨棄小數部分。

這就是爲什麼140/150讓你總是0,不0.9333...

.NET有3個類型的劃分的。從C#規格在7.7.2 Division operator

  • 整數除法
  • 浮點除法
  • 小數除法

劃分舍入到零的結果,和 絕對值的結果是該最大可能整數小於兩個操作數的商的絕對值。

如果你想喜歡0.93顯示它您需要在整數投一個浮點數。

例如;

140d/150 // 0.933333... 
140/150d // 0.933333... 
140d/150d // 0.933333... 
140.0/150 // 0.933333... 
140/150.0 // 0.933333... 
140.0/150.0 // 0.933333... 
+0

或者使用數據文字......在這種情況下,f或d就足夠了...... –

+0

所以 - 150/140變爲140d/150d,甚至140d/150 '感覺懶惰 - 只有一個操作數必須是非整數... –

+1

@MartinMilan就像我在'140d'或'150d'中做的那樣?兩個操作數也可以是浮點數,但其中一個就足夠了。這就是爲什麼我在我的答案中提到了一個。 –