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)。
精彩评论