2011-11-21 131 views
0

我正在嘗試計算下面的數字。當它應該是83.12454之類的東西時,我總是得到0。計算一個值並舍入到最接近的整數

我相信我想要一個Double變量類型。我在下面做錯了什麼?一旦我得到我需要修整小數的值。

Ratings GetNoVotes = new Ratings(); 
int DATotalYesVotes = GetNoVotes.GetTotalNOVotes(1, yesPictureId); //80 
int DaTNoVotes = GetNoVotes.GetTotalNOVotes(2, yesPictureId);  //15 
int DaTotalVotes = DATotalYesVotes + DaTNoVotes;     //95 

double Percentage = (DATotalYesVotes/DaTotalVotes)*100;   //84.2105 
// Math.Round(Percentage); 
TotalyesVotes.Text = Percentage.ToString(); 
+0

您是否嘗試過打印出中間值?即DATotalYesVotes等 – mydogisbox

+0

通常的技巧涉及'Math.Floor(x + .5)'IIRC – sehe

回答

3

問題是,DATotalYesVotes是一個小於DaTotalVotes的整數。因爲/意味着整數除法,它乘以100之前向下舍入這裏有兩種方法:

(1)乘以100第一(靜止一些舍入誤差 - 但並不多)

double Percentage = (DATotalYesVotes * 100/DaTotalVotes); 

(2)投射到第一

double Percentage = ((double)DATotalYesVotes/(double)DATotalVotes)*100; 
+0

謝謝我有點認爲ID必須做這樣的事情。它工作完美。 Apreciate幫助。 – CsharpBeginner

1

雙打的整數除法產生的零的整數結果,那麼您可以通過100嘗試鑄造乘以它一倍的數字之一。

double Percentage = ((double)DATotalYesVotes/DaTotalVotes)*100;  
2

你需要轉換DATotalYesVotes和DaTotalVotes將他們之前的兩倍:2個整數

double Percentage = ((double)DATotalYesVotes/(double)DaTotalVotes)*100.0; 

其他明智的劃分將導致第三次(和截斷)INT。

相關問題