C++的ceil、floor和round用法解读
目录
- 1. 标准库函数(推荐)
- (1)std::ceil(x)—— 向上取整
- (2)std::floor(x)—— 向下取整
- (3)std::round(x)—— 四舍五入
- 2. 手动实现(适用于整数运算)
- (1)向上取整(Ceiling)
- (2)向下取整(Floor)
- (3)四舍五入(Rounding)
- 3. 注意事项
- 4. 总结
在 C++ 中,向上取整(Ceiling)、向下取整(Floor)、四舍五入(Rounding) 可以通过标准库 <cmath> 提供的函数实现。
1. 标准库函数(推荐)
(1)std::ceil(x)—— 向上取整
功能:返回 ≥ x 的最小整数(即“天花板值”)。
头文件:#include <cmath>
示例:
#include <cmath>
#include <IOStream>
int main() {
double x = 3.2;
double y = -2.7;
std::cout << std::ceil(x) << std::endl; // 输出 4.0
std::cout << std::ceil(y) << std::endl; // 输出 -2.0
return 0;
}
(2)std::floor(x)—— 向下取整
功能:返回 ≤ x 的最大整数(即“地板值&javascriptrdquo;)。
头文件:#include <cmath>
示例:
#include <cmath>
#include <iostream>
int main() {
double x = 3.7;
double y = -2.3;
std::cout << std::floor(x) << std::endl; // 输出 3.0
std::cout << std::floor(y) << std::endl; // 输出 -3.0
return 0;
}
(3)std::round(x)—— 四舍五入
功能:返回最接近 x 的整数(四舍五入)。
头文件:#include <cmath>
示例:
#include <cmath>
#include <iostream>
int mhttp://www.devze.comain() {
double x = 3.4;
double y = 3.6;
double z = -2.5;
std::cout << std::round(x) << std::endl; // 输出 3.0
s编程客栈td::cout << std::round(y) << std::endl; // 输出 4.0
std::cout << std::round(z) << std::endl; // 输出 -2.0(注意:-2.5 四舍五入为 -2)
return 0;
}
2. 手动实现(适用于整数运算)
(1)向上取整(Ceiling)
int ceil_division(int a, int b) {
return (a + b - 1) / b;
}
示例:
int x = 7, y = 3; int ceil = (x + y - 1) / y; // ceil = 3(因为 7/3 ≈ 2.333,向上取整得 3)
(2)向下取整(Floor)
int floor_division(int a, int b) {
return a / b;
}
示例:
int x = 7, y = 3; int floor = x / y; // floor = 2(因为 7/3 ≈ 2.333,向下取整得 2)
(3)四舍五入(Rounding)
int round_division(int a, int b) {
return (a + b / 2) / b;
}
示例:
int x = 7, y = 3; int rounded = (x + y / 2) / y; // rounded = 2(因为 7/3 ≈ 2.333,四舍五入得 2)
3. 注意事项
std::ceil、std::floor、std::round 返回 double,如果需要整数,需要显式转换:
int ceil_val = static_cast<int>http://www.devze.com;(std::ceil(3.2)); // ceil_val = 4 int floor_val = static_cast<int>(std::floor(3.7)); // floor_val = 3 int round_val = static_cast<int>(std::round(3.6)); // round_val = 4
负数情况:
std::ceil(-2.3)返回-2.0(向上取整)。std::floor(-2.3)返回-3.0(向下取整)。std::round(-2.5)返回-2.0(四舍五入)。
编译选项(某些编译器可能需要 -lm 链接数学库):
g++ program.cpp -o program -lm
4. 总结
| 方法 | 适用场景 | 示例 |
|---|---|---|
| std::ceil(x) | 标准向上取整(推荐) | std::ceil(3.2) → 4.0 |
| std::floor(x) | 标准向下取整(推荐) | std::fpythonloor(3.7) → 3.0 |
| std::round(x) | 标准四舍五入(推荐) | std::round(3.6) → 4.0 |
| (a + b - 1) / b | 整数向上取整 | (7 + 3 - 1) / 3 = 3 |
| a / b | 整数向下取整 | 7 / 3 = 2 |
| (a + b / 2) / b | 整数四舍五入 | (7 + 1) / 3 = 2 |
推荐优先使用 <cmath> 提供的标准函数,它们更通用且可读性更好。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论