int a, b, c = 0;
c = (a+b)/2;
在此代码中,如果两者都是" a"和" b"是偶数(例1),那就没问题了。但如果其中一个奇数(例2),那么答案将为+0.5。我想整理一下。
示例1。
a = 4,b = 10
c将= 7 这没关系。
示例2。
a = 3,b = 4
c将= 3.5 而且我希望c被四舍五入而变成 4 。
答案 0 :(得分:7)
首先,你错了。 c
是一个整数,因此它不能是3.5。此外,a
,b
和2都是整数,因此除法是整数除法,因此它也不能产生3.5。它将向零舍入,因此它将为3。
也就是说,要将整数除以2而不是向下舍入,只需在除法前加1。 (14 + 1) / 2 == 7
,所以这仍然是正确的。 (7 + 1) / 2 == 4
,这也是正确的。
答案 1 :(得分:1)
最简单的方法是在结果之后使用+ 1
如果结果不是圆的(ceil
函数默认为你做什么)
int a, b, c = 0;
if ((a + b) % 2 == 1)
c = ((a+b)/2) + 1;
else
c = (a+b)/2;
答案 2 :(得分:1)
使用ceil功能。无论你输入的是什么数字,它总是会四舍五入。
答案 3 :(得分:1)
int a, b, c = 0;
c = (a+b+1)/2;
答案 4 :(得分:0)
最简单的方法是使用<math.h>
中的ceil()
函数。
int a, b, c = 0;
c = (int) ceil((float)(a+b)/2);
答案 5 :(得分:0)
首先,将c
设为double
,然后使用
c = (a + b)/2.0
否则,由于int
被分割为int
而导致截断。这样,(a + b) / 2.0
是double
,因为分母是double
,因此您没有任何截断。
接下来,使用C ++ 11中的std::round
函数或std::floor/std::ceil
,具体取决于您想要的内容
或者,您可以保留c
和int
但
c = std::round( (a + b) / 2.0 ); // rounding to nearest integer, C++11
或
c = std::floor( (a + b) / 2.0 ); // rounding down
或
c = std::ceil( (a + b) / 2.0 ); // rounding up
如果您不想要任何警告,也可以明确地将std::floor/std::ceil/std::round
的结果转发回int
,例如
c = static_cast<int>(std::round( (a + b) / 2.0 )); // now we tell the compiler we know what we're doing