4

我正在划分 2 个整数并希望得到一个整数。我想要正确的Math.Round()方法,所以当我除法时,无论如何它总是四舍五入到下一个整数。这里有一堆例子,下面有期望。

int result = (6/4); // = 2
int result = (3/4);  // = 1
int result = (1/4);  // = 1
int result = (8/4);  // = 2
int result = (9/4);  // = 3

这样做的正确方法是什么?

4

4 回答 4

7

由于您的示例中的所有整数都是正数,因此我假设您对一个或两个操作数为负数或零的情况不感兴趣。

Math.Round适用于浮点数。这里没有必要。

两个整数相除得到整数结果。它总是四舍五入。你想要这样的东西:

int Divide(int numerator, int denominator) {
    return (numerator + denominator - 1) / denominator;
}

例如,for 1/4, we get(1 + 4 - 1) / 4 = 4 / 4 = 1和 for 8/4we get (8 + 4 - 1) / 4 = 11 / 4 = 2

这里溢出的可能性很小,所以如果分子总是大于零,最好使用:

int Divide(int numerator, int denominator) {
    return 1 + (numerator - 1) / denominator;
}
于 2013-02-26T22:37:13.997 回答
4

您需要以浮点/双精度执行除法并使用Math.Ceiling

Math.Ceiling... 返回大于或等于指定双精度浮点数的最小整数值。

样本:

 int result = (int)Math.Ceiling(6/4.0);
 result = (int)Math.Ceiling((double)3/4);
于 2013-02-26T22:34:07.153 回答
0

这些整数之一应该是 a double

double result = (6d/4); // 1.5  
int rounded = (int)Math.Round(result, MidpointRounding.AwayFromZero);
于 2013-02-26T22:32:33.580 回答
0

这绝对不是你要找的方法......

int mod = 9 % 4;
int result = (9 - mod) / 4) + (mod > 0 ? 1 : 0);

不需要 Math 类的任何转换或使用。

于 2013-02-26T22:34:43.147 回答