2011-02-04 122 views
4

我有兩個整數(兩個文件的字節數)。如果不是一樣的話,它總是比較小。我想計算較小的百分比。找到一個整數到另一個整數的百分比

我用我已經應用了數學公式平原C.,但我總是得到0:

printf("%d\r", (current/total)*100); 

任何想法?

回答

9

嘗試

printf("%g\r", (((double)current)/total)*100); 

代替。整數除法總是趨向於零。首先將其中一個數字轉換爲double,您將觸發浮點除法。如果你想使用整數算術,你也可以使用

printf("%d\r", (100*current)/total); 

這將打印向下舍入到下一個整數的百分比。

+1

謝謝,你在第二個例子中有一個額外的括號;)。 – 2011-02-04 16:25:12

0

更好的嘗試:

printf("%lf\r", (((double)current)/total)*100); 

因爲答案將在浮點。

3

斯文給你提供了很好的建議。

如果你想讓你的整數,做乘法除法之前:

printf("%d\r", (current * 100)/total); 

你會得到一個四捨五入的結果。

numerator < denominator完成的積分除法總是給出0.這就是對「永遠爲0」問題的解釋。將讓您的劃分(百分比)

MY2C的組成部分之前乘以100

2

我建議這樣做除法之前擴大提名者:

const float ratio = (100.f * current)/total; 

這裏,使100浮點文字會促進計算,因此不需要明確的演員表演也是一種好處。

0

整數除法幾輪下來,所以如果你的答案是小於1,你將會獲得0

你可以嘗試這樣的:

printf("%d\r", ((current*100)/total)); 

但是你總是會得到一個整數。

如果你將一個分子轉換爲一個浮點數,你將得到浮點除法和正確的答案。

printf("%f\r", ((float)current/total * 100)); 

然而,你可能想後截斷爲零,例如,在小數點前3位和2可以使用後:

printf("%3.2f\r", ((float)current/total * 100)); 

退房:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

相關問題