2012-07-29 121 views
1

你好,大家好我有一個小問題,我有一個文本文件得到 19862線C#控制檯應用程序%數學總是在我的控制檯應用程序 返回0

String[] lines= File.ReadAllLines("C:\\Users\\ThElitEyeS\\Desktop\\PHP\\name\\names.txt"); 
int c = lines.Length; 
int i = 1; 
foreach (String line in lines) { 
    long f = ((i++/c) * 100); 
    Console.WriteLine(f + "%"); 
} 

值總是返回0% 除了最後一個其返回100% ,這是我的問題,我希望能夠快速找到問題:)

回答

4

您正在作出整數devision,將被舍入。

例子:

i = 1 and c= 100 
result is 0.01 -> rounded to 0 
0 * 100 = 0 

而是嘗試

long f = ((i++/(double) c) * 100); 

強制浮點等分。

+0

由於其工作 – ThElitEyeS 2012-07-29 07:05:05

+0

@ThElitEyeS但爲何'f'聲明爲'long'? – 2012-07-29 09:20:34

1

你已經有一個工作的答案,但我不會用double這裏,當整數除法(不圓的,而是截斷)就足夠了:

long f = i++ * 100/c; 
+0

是否有可能某些編譯器將「優化」爲仍然是i ++/c * 100,具有相同的原始錯誤? – 3Pi 2012-07-29 07:33:35

+0

@ 3Pi(我以爲你的意思是最初的其他東西)這樣的編譯器將被打破。評估是明確的,並將其編譯爲其他結果不同的結果是無效的。 – hvd 2012-07-29 07:39:44