C# - 舍入整数除法

时间:2013-04-30 02:51:36

标签: c# math multidimensional-array int rounding

Windows,C#,VS2010。

我的应用有以下代码:

int[,] myArray=new int[10,2];
int result=0;
int x=0;
x++;

如下所示,如果结果在10.0001和10.9999之间;结果= 10

result= (myArray[x,0]+myArray[x+1,0])/(x+1); 

我需要这个: 如果结果> = 10&&< 10.5轮到10。 如果> = 10.500&&< = 10.999之间的结果轮到11。

请尝试以下代码。但没有奏效。

result= Math.Round((myArray[x,0]+myArray[x-1,0])/(x+1));

错误:以下方法或属性之间的调用不明确: 'System.Math.Round(double)'和'System.Math.Round(decimal)'

错误:无法将类型'double'隐式转换为'int'。 存在显式转换(您是否错过了演员?)

result= Convert.ToInt32(Math.Round((myArray[x,0]+myArray[x-1,0])/(x+1)));

错误:以下方法或属性之间的调用不明确: 'System.Math.Round(double)'和'System.Math.Round(decimal)'

提前致谢,ocaccy pontes。

2 个答案:

答案 0 :(得分:7)

尝试

result= (int)Math.Round((double)(myArray[x,0]+myArray[x-1,0])/(x+1));

这应该解决你的编译器错误。

第一个(“错误:以下方法或属性之间的调用不明确:'System.Math.Round(double)'和'System.Math.Round(decimal)'”)通过转换股息来解决到double,“涓涓细流”,以便除法的输出 a double,以避免精度损失。

您还可以将函数参数显式转换为double以获得相同的效果:

Math.Round((double)((myArray[x,0]+myArray[x-1,0])/(x+1)));

(注意括号的位置)。

第二个错误(“错误:无法将类型'double'隐式转换为'int'。存在显式转换(您是否错过了转换?)”)通过显式转换Math.Round的返回值来修复到int

答案 1 :(得分:0)

我知道这是一个3岁的问题,但这个答案似乎运作良好。也许有人会找到这些有价值的扩展方法。

// Invalid for Dividend greater than 1073741823.
public static int FastDivideAndRoundBy(this int Dividend, int Divisor) {
    int PreQuotient = Dividend * 2 / Divisor;
    return (PreQuotient + (PreQuotient < 0 ? -1 : 1)) / 2;
}

// Probably slower since conversion from int to long and then back again.
public static int DivideAndRoundBy(this int Dividend, int Divisor) {
    long PreQuotient = (long)Dividend * 2 / Divisor;
    return (int)((PreQuotient + (PreQuotient < 0 ? -1 : 1)) / 2);
}