在 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。
如果结果不是圆形,最简单的方法是在结果后使用 + 1
(ceil
函数默认为您执行的操作)
int a, b, c = 0;
if ((a + b) % 2 == 1)
c = ((a+b)/2) + 1;
else
c = (a+b)/2;
使用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
,具体取决于您的需要
或者,您可以保留 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
首先,你错了。 c
是整数,不可能是3.5。另外,a
、b
、2都是整数,所以除法是整数除法,所以也不能得到3.5。它将向零舍入,因此将为 3。
就是说,要使除以 2 的整数向上取整而不是向下取整,只需在除法之前加 1。 (14 + 1) / 2 == 7
,所以还是对的。 (7 + 1) / 2 == 4
,所以这也是正确的。
int a, b, c = 0;
c = (a+b+1)/2;
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。
如果结果不是圆形,最简单的方法是在结果后使用 + 1
(ceil
函数默认为您执行的操作)
int a, b, c = 0;
if ((a + b) % 2 == 1)
c = ((a+b)/2) + 1;
else
c = (a+b)/2;
使用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
,具体取决于您的需要
或者,您可以保留 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
首先,你错了。 c
是整数,不可能是3.5。另外,a
、b
、2都是整数,所以除法是整数除法,所以也不能得到3.5。它将向零舍入,因此将为 3。
就是说,要使除以 2 的整数向上取整而不是向下取整,只需在除法之前加 1。 (14 + 1) / 2 == 7
,所以还是对的。 (7 + 1) / 2 == 4
,所以这也是正确的。
int a, b, c = 0;
c = (a+b+1)/2;