如果我将3除以2,我希望答案为2(即1.5舍入为2)

时间:2010-03-20 04:30:55

标签: c decimal rounding

如何获得C中数字的上限?

如果我将3除以2,我希望答案为2(即1.5舍入为2)。

8 个答案:

答案 0 :(得分:13)

如果你只想要除以2,那么只需取(n + 1)/ 2就可以将它保持在整数数学中。例如(3 + 1)/ 2给出2.对于更大的数字x,使用x - 1.例如,(3 + 7)/ 8 = 1,3除以8。

对于一般情况,您正在寻找天花板功能 - ceil。快速Google搜索“math ceil C”会将此页面放在搜索结果的顶部:http://www.elook.org/programming/c/ceil.html

答案 1 :(得分:4)

答案 2 :(得分:3)

#include <math.h>
ceil(3.0/2); //2.0

请注意,一个操作数应该是double(或float),因为3/2给你1

答案 3 :(得分:2)

int x= ceil((float)3/2);

答案 4 :(得分:1)

要在不使用函数的情况下进行舍入,只需在除法之前加上一半除数。 如果除数是常量,编译器可以很好地优化代码。

int  number = 3;
int  divisor = 2;
int  result = (number + (divisor+1)/2) / divisor;

答案 5 :(得分:1)

int i = 3;
int j = 2;
int k = (i + j - 1) / j;

答案 6 :(得分:1)

(如果这有资格作为线程的死灵法术,请通知我,我会删除它)

返回向上舍入商的快速方法是将除数(减1)加到被除数中,并除以。

int ceil_div(int dividend, int divisor) {
    return (dividend + divisor - 1) / divisor;
}

或者,

int ceil_div(int dividend, int divisor) {
    return (dividend - 1) / divisor + 1;
}

相反,你将通过从3减去1,除以2,然后加1来工作。

我会试着解释为什么会这样。如果被除数除数都是浮点数,则截断的整数等价于(被除数 / 除数)将是相等的如果除数完全除以股息,则为商数的上限;如果不能完全划分股息,则为少于商数的上限。通过减去1,我们保证新除数被除数 - 1 ,除以除数时,将始终返回一个小于浮点商的上限的值。 / p>

现在剩下的就是给这个商添加1,顺便说一下,这是一个((浮动)红利/(浮动)除数)。

答案 7 :(得分:0)

int x = 3.0/2 + 0.5;