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