哪个数学函数会给我正确的舍入功能?

时间:2014-01-07 11:50:58

标签: c# math rounding

我有以下代码行:

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的方式。

有人建议哪些是在这些情况下使用的最佳功能?

提前致谢。

6 个答案:

答案 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