我正在划分 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
这样做的正确方法是什么?
由于您的示例中的所有整数都是正数,因此我假设您对一个或两个操作数为负数或零的情况不感兴趣。
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/4
we get (8 + 4 - 1) / 4 = 11 / 4 = 2
。
这里溢出的可能性很小,所以如果分子总是大于零,最好使用:
int Divide(int numerator, int denominator) {
return 1 + (numerator - 1) / denominator;
}
您需要以浮点/双精度执行除法并使用Math.Ceiling:
Math.Ceiling... 返回大于或等于指定双精度浮点数的最小整数值。
样本:
int result = (int)Math.Ceiling(6/4.0);
result = (int)Math.Ceiling((double)3/4);
这些整数之一应该是 a double
:
double result = (6d/4); // 1.5
int rounded = (int)Math.Round(result, MidpointRounding.AwayFromZero);
这绝对不是你要找的方法......
int mod = 9 % 4;
int result = (9 - mod) / 4) + (mod > 0 ? 1 : 0);
不需要 Math 类的任何转换或使用。