2014-01-07 44 views
1

我有下面的代碼行:哪個數學函數會給我正確的舍入功能?

var loan = (int)(Math.Truncate((usableIncome/avgRate)/loanMultiple) * loanMultiple); 

目前,你可以看到我使用Math.Truncate始終採取數量的整數部分。所以如果方程拋出5.1,5.5或5.9,我總是回到5.

我需要做一個改變,以便我得到最接近的整數。 5.1仍然是5,5.5,5.9會解析爲6.我並不十分關心5.5的走向。

有人建議哪些是在這些情況下使用的最佳功能?

在此先感謝。

+3

您可以使用Math.Round()函數。 – Naren

回答

5

聽起來你正在尋找Math.Round(Double, MidpointRounding)方法:

回合十進制值到最近的整數。一個參數指定 如何在兩個數字中間的位置舍入數值。

Console.WriteLine(Math.Round(5.1, MidpointRounding.AwayFromZero)); 
Console.WriteLine(Math.Round(5.5, MidpointRounding.AwayFromZero)); 
Console.WriteLine(Math.Round(5.9, MidpointRounding.AwayFromZero)); 

輸出將是;

5 
6 
6 

這裏一個demonstration

+1

選擇此答案是因爲它還演示了該函數中可用的舍入選項。 – dotnetnoob

2

用下面的辦法:

double num = (((double)usableIncome/(double)avgRate)/(double)loanMultiple) * loanMultiple); 
var loan = Convert.ToInt32(Math.Round(num, MidpointRounding.AwayFromZero)); 
3

您可以使用內置的Round函數

var loan = Math.Round(((usableIncome/avgRate)/loanMultiple) * loanMultiple),MidpointRounding.AwayFromZero); 
2

Math.Round()完全如此。例如:

Console.WriteLine(Math.Round(4.4)); // 4 
Console.WriteLine(Math.Round(4.5)); // 4 
Console.WriteLine(Math.Round(4.6)); // 5 
Console.WriteLine(Math.Round(5.5)); // 6 

如果您需要更多的信息,你可以閱讀this

2

嘗試:

var loan = (int)(Math.Round((usableIncome/avgRate)/loanMultiple) * loanMultiple); 
1

爲什麼不使用Math.Round?

Math.Round(5.4,0); 
//Gives 5 
Math.Round(5.5,0); 
//Gives 6 
Math.Round(5.6,0); 
//Gives 6