在C ++中舍入平均值的最简单方法

时间:2015-02-16 16:55:45

标签: c++ rounding

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

6 个答案:

答案 0 :(得分:7)

首先,你错了。 c是一个整数,因此它不能是3.5。此外,ab和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;

演示:https://ideone.com/AmgDUt

答案 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.0double,因为分母是double,因此您没有任何截断。

接下来,使用C ++ 11中的std::round函数或std::floor/std::ceil,具体取决于您想要的内容

或者,您可以保留cint

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