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

Simplest Way of Rounding Up the Average in C++

int a, b, c = 0;
c = (a+b)/2;

这段代码中,如果"a"和"b"都是偶数(例1),那么就没有问题。但如果其中之一是 odd(示例 2),则答案将有 +0.5。我想把它四舍五入。

示例 1.

a=4, b=10

c = 7 这样就可以了。

示例 2.

a=3, b=4

c = 3.5 我希望 c 被四舍五入并变成 4

如果结果不是圆形,最简单的方法是在结果后使用 + 1ceil 函数默认为您执行的操作)

int a, b, c = 0;
if ((a + b) % 2 == 1)
   c = ((a+b)/2) + 1;
else
   c = (a+b)/2;

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

使用ceil函数。它总是会四舍五入你输入的任何数字。

最简单的方法是使用 <math.h> 中的 ceil() 函数。

int a, b, c = 0;
c = (int) ceil((float)(a+b)/2);

首先,将c设为double,然后使用

c = (a + b)/2.0

否则,由于 int 的除法被转换为 int,您将被截断。这样,(a + b) / 2.0是一个double,因为分母是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

首先,你错了。 c是整数,不可能是3.5。另外,ab、2都是整数,所以除法是整数除法,所以也不能得到3.5。它将向零舍入,因此将为 3。

就是说,要使除以 2 的整数向上取整而不是向下取整,只需在除法之前加 1。 (14 + 1) / 2 == 7,所以还是对的。 (7 + 1) / 2 == 4,所以这也是正确的。

int a, b, c = 0;
c = (a+b+1)/2;