2011-10-10 145 views
3

我試圖計算成功作業總數的百分比。 代碼:C#簡單數學函數

int total = valid + invalid; 
int percent = (valid/total) * 100; 
if (percent == 0) 
{ 
    MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid)); 
    break; 
} 

如果所有的工作都成功,百分比是100%。 如果一個任務是壞的,百分比爲0,我得到消息框有: 9:8

8/9 * 100 = 88.888,不是0

int percent = Convert.ToInt32((valid/total) * 100); 

沒有給出結果。請幫幫我。 我是俄羅斯人,對不起英語感到抱歉。

+3

你正在做整數除法... – davin

回答

3

我猜測都validinvalid被定義爲int秒。在這種情況下,所有計算的結果也將是int s。

你要麼需要轉換值中的一個浮點類型的操作或者,這可能會更容易,定義值中的一個作爲浮點類型開始:

double total = valid + invalid; 
int percent = (valid/total) * 100; 
+0

值得注意的另一個選項(如果你想要的只是一個int),你可以改變計算順序。 (有效* 100)/總數將起作用(當然,您必須注意,最終結果將是一個簡單的整數,而不是通常預期的方式)。 – Chris

0

嘗試:

float total = valid + invalid; 
float percent = (valid/total) * 100; 
if (percent == 0) 
{ 
    MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid)); 
    break; 
} 

編輯:

變更%的浮動太大。

+0

原因是int除以另一個int總是給你一個int。如果你用float分隔一個int,你會得到一個浮點數。所以你的值四捨五入到最接近的整數(0或1),然後你乘以100. –

+0

你忘了一個int轉換爲int – harold

+0

上面不會給第二行編譯器錯誤? (隱式地將'float'轉換爲'int') – James

3

你的有效和總變量是int,這意味着你的有效/總分數將被截斷爲一個整數,在你的情況下它總是爲0。

如果您將其中一個變量更改爲雙精度型,它將允許分區執行您期望的方式。

int percent = Convert.ToInt32(((double)valid/total) * 100); 

現在,這會導致你的if語句不能正常工作了,所以你必須要改變,要察看一下,這不是100

所以不是

if (percent == 0) 

你想要做這樣的事情

if (percent != 100) 

代替

0

在計算之前將您的整數轉換爲浮點數。

int percent = Math.Round(((float)valid/(float)total) * 100); 
0

你需要使用某種浮點數學而不是整數。

int total = valid + invalid; 
int percent = ((decimal)valid/(decimal)total) * 100m; 
0

的問題是,的(valid/total)結果爲int(整數),如validtotalints,所以除法的結果將截斷成整數。

解決方法是迫使一個是一個floatdoubledecimal

int percent = (int)Convert.ToInt32(((float)valid/total) * 100); 
0

您應該使用float而不是int

float percent = ((float)valid/(float)total) * 100.00f; 

編輯
是的,我忘了投vallidtotal浮動。

+0

在轉換爲浮點數以執行乘法操作之前,不會有與(int/valid)相同的問題。 –

+0

@GeorgeDuckett:是的,編輯 – IAbstract

0

你的其中一個因素需要是浮點值,否則你最終會得到一個整數。

int total = valid + invalid; 

int percent = (int)((valid/(float)total) * 100); 

if (percent == 0) 
{ 
    MessageBox.Show(Convert.ToString(total) + ":" + Convert.ToString(valid)); 
    break; 
} 
1

你只需要多與周圍的澆鑄,這樣你沒有做整數除法和尋找一個浮點結果,例如:

double percent = ((double)valid/total) * 100; 
1

讓您的生產線是:

int percent = (int)(((float)valid/(float)total) * 100f); 
1

你的問題是你在integer(целоечисло)上運行,但爲了讓分區正常工作,你應該使用rational number

當你執行8/9時,你有0,因爲八低於9,所以結果將在1和0之間。要表示1到0之間的數字,你必須使用浮點類型。

float total = valid + invalid; 

現在分工是這樣的:

8/9.0 

但這仍然不是終點,如果分配的浮點數成整數,你將有一個編譯器警告。

float result = (valid/total) * 100;