2014-01-17 114 views
0

在我的C#應用​​程序中,我想實現一個簡單的計算。我得到這個代碼:簡單的計算器總是返回0

private void button1_Click(object sender, EventArgs e) 
{ 
    int percentField; 
    int priceField; 
    int result; 

    percentField = int.Parse(txtPercentNew.Text); 
    priceField = int.Parse(txtPriceNew.Text); 

    result = priceField/100 * percentField; 

    MessageBox.Show(result.ToString()); 
} 

但問題是MessageBox顯示我0。我無法弄清楚爲什麼。 有人可以給我一個提示,我做錯了什麼?

+2

你正在用整數除int。仔細檢查整數除法,你會看到你的問題。 – Dan

+0

下一次,你應該提供一些測試值/結果,所以問題變得更加清楚... – Tsasken

+0

@Tsasken我會記住下次,謝謝:) – Tyler

回答

8

您的變量是整數,這意味着/執行integer division。除非priceField至少等於100,否則結果始終爲0。

您可以通過鑄造priceField爲浮點型將之前糾正問題:

(double)priceField/100 * percentField; 

然而,儘管resultint類型的,因爲編譯器要保護你免受意外的舍入誤差,這將不起作用。所以,你要麼必須轉換回一個整數(損失精度由於四捨五入):

result = (int)((double)priceField/100 * percentField); 

要麼做resultdouble爲好。

+0

好的,謝謝你的輸入。很高興知道。但是如果我使用「double」它說我使用了錯誤的格式 – Tyler

+0

@Tyler:檢查更新,它應該解決問題。 – Jon

+0

好啊。這聽起來比以前更合理!非常感謝:)我將仔細看看整數分區:) – Tyler

0

你僅與整數工作,儘量

double result;  
result = priceField/(double)100 * percentField; 

在代碼中,你是除以100這意味着每一個詮釋你要分不到100將導致0之間[價值 - 1]。當隱式轉換爲int時,結果將會變爲floated。因此,0.1將變爲0 - 0.9將變爲0 - ...

1

您正在使用整數而不是浮點數。因此,在計算過程中發生四捨五入。

使用floatdouble而不是int

1

可能是你priceField是小於100因爲你做整數除法,它創建0結果。

/ Operator (C# Reference)

當你把兩個整數,結果始終是整數。對於 示例,7/3的結果爲2.要確定剩餘的7/ 3,請使用餘數運算符(%)。要獲得商數作爲合理的 數字或分數,給予股息或除數類型浮動或鍵入 雙。如以下示例所示,如果您通過在 小數點的右側輸入一位數字表示股利 或除數作爲小數,則可以隱式指定類型。

只需將其中一個變量轉換爲浮點類型,如:

result = priceField/100d * percentField; 

result = (double)priceField/100 * percentField; 
0

試投地double,因爲你與整數工作它的結果爲0

例如here

0

問題是你使用int爲每個值。

變化導致的double和嘗試這個辦法:

result = (double)priceField/100 * percentField; 

它應該工作;然而,如果你想正確地做到這一點,我建議你閱讀關於MidpointRounding