我有以下代码行:
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的方式。
有人建议哪些是在这些情况下使用的最佳功能?
提前致谢。
答案 0 :(得分: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 :(得分:3)
你可以使用内置的Round函数
var loan = Math.Round(((usableIncome / avgRate) / loanMultiple) * loanMultiple),MidpointRounding.AwayFromZero);
答案 2 :(得分:2)
使用以下方法:
double num = (((double)usableIncome / (double)avgRate) / (double)loanMultiple) * loanMultiple);
var loan = Convert.ToInt32(Math.Round(num, MidpointRounding.AwayFromZero));
答案 3 :(得分: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
答案 4 :(得分:2)
尝试:
var loan = (int)(Math.Round((usableIncome / avgRate) / loanMultiple) * loanMultiple);
答案 5 :(得分:1)
为什么不使用Math.Round?
Math.Round(5.4,0);
//Gives 5
Math.Round(5.5,0);
//Gives 6
Math.Round(5.6,0);
//Gives 6