2016-10-04 29 views
-5

當我進入,在Windows計算器程序,「18218分之15036* 100 =」返回82.53375782193435爲什麼我使用此代碼獲得0.0?

我真正想要的是17.47(100 - 82.53),但是這是目前的重點。

有了這個代碼:

// Example: thisQty == 3182; totalQty == 18218 
private string GetPercentage(int thisQty, int totalQty) 
{ 
    int diff = totalQty - thisQty; // this equates to 15036 
    double prcntg = (diff/totalQty)*100; // this equates to 0.0 for some reason 
    return string.Format("{0}%", prcntg); 
} 

...我得到了prcntg值0.0。爲什麼? ISTM,這與我在Calculator實用程序中手動執行的操作相同。爲什麼它不返回82.53375782193435?

+3

您必須將diff轉換爲double,double prcntg =((double)diff/totalQty )* 100; –

+0

當你有一個答案,增​​加了一些東西,張貼它作爲一個自我回答。不要在問題中編輯「解決方案」。 –

回答

5

即使正確的數學答案是一個分數,2 int的劃分將是一個int

爲了擁有它讓你必須與一些類型的保存小數部分(像doubledecimal)劃分的小數部分:

Console.WriteLine(GetPercentage(3182, 18218)); 

private string GetPercentage(int thisQty, int totalQty) 
{ 
    int diff = totalQty - thisQty; // this equates to 15036 
    double prcntg = (diff/(double)totalQty) * 100; 
    return string.Format("{0}%", prcntg); 
} 

BTW - 這並不重要,如果在投射到doubledifftotalQty - 兩個它會做/操作返回double - 這意味着保持小數部分

2

您正在使用整數值(不存儲派系部分),因此將其轉換爲double或將參數類型用作double(我的推薦)。你的操作,15036/18218解決,0.82和一個整數值,存儲爲0 ...最後0 * 100將解決0,反正這就是你得到的結果。

試試這個,

private string GetPercentage(double thisQty, double totalQty) 
{ 
    double diff = totalQty - thisQty; // this equates to 15036 
    double prcntg = (diff/totalQty) * 100.0; // this equates to 0.0 for some reason 
    return string.Format("{0}%", prcntg); 
} 

這將有小數部分過,你會得到的結果。

+0

這與我原來的代碼有什麼不同? –

+0

差異需要雙倍。它仍然是一個INT。 – Jay

+0

@ B.ClayShannon,傳入的參數「thisQty」和「totalQty」現在是double而不是int。但是,「diff」變量也需要是double類型的。 – Jay

1

基於吉拉德格林回答,這裏是我最終得到的值,它給出了我最終想要的值,並且將該值舍入爲整數:

private string GetPercentage(int thisQty, int totalQty) 
{ 
    int diff = totalQty - thisQty; 
    double prcntg = (diff/(double)totalQty) * 100; 
    prcntg = 100 - prcntg; 
    int roundedPercent = Convert.ToInt32(prcntg); 
    return string.Format("{0}%", roundedPercent); 
} 
相關問題