C++的ceil、floor和round用法解读

 更新时间:2025年07月14日 14:39:06   作者:咸鱼_要_翻身  
文章介绍了C++中实现取整的三种方法:标准库函数(ceil、floor、round)和手动整数运算公式,强调推荐使用cmath中的标准函数,注意其返回double类型及负数处理规则

在 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 的最大整数(即“地板值”)。

头文件#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 main() {
    double x = 3.4;
    double y = 3.6;
    double z = -2.5;

    std::cout << std::round(x) << std::endl;  // 输出 3.0
    std::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::ceilstd::floorstd::round 返回 double,如果需要整数,需要显式转换:

int ceil_val = static_cast<int>(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::floor(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> 提供的标准函数,它们更通用且可读性更好。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vscode编译运行c语言报错乱码的解决

    vscode编译运行c语言报错乱码的解决

    本文主要介绍了vscode编译运行c语言报错乱码,文中通过图文介绍的的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • C++无符号整数溢出问题解析

    C++无符号整数溢出问题解析

    这篇文章主要介绍了C++无符号整数溢出探究,本文主要探讨C/C++中无符号整数超过范围后的计算问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 浅析C++中的重载,隐藏和覆盖

    浅析C++中的重载,隐藏和覆盖

    在C++语言中,函数扮演着很重要的角色,不管面向过程设计,还是基于对象设计。本文主要为大家介绍了函数中重载、覆盖和隐藏的相关知识,感兴趣的小伙伴可以了解一下
    2022-12-12
  • VScode platformio使用的详细步骤

    VScode platformio使用的详细步骤

    使用VSCode作为编辑器,同时借助PlatformIO插件,可以帮助开发者更加高效地进行嵌入式开发,本文主要介绍了VScode platformio使用的详细步骤,感兴趣的可以了解一下
    2023-10-10
  • c++20引入的三路比较操作符<=>

    c++20引入的三路比较操作符<=>

    本文主要介绍了c++20引入的三路比较操作符<=>,返回strong_ordering、weak_ordering和partial_ordering三种类型,下面就来具体介绍一下,感兴趣的可以了解一下
    2025-06-06
  • C语言 while语句的用法详解

    C语言 while语句的用法详解

    本文主要介绍C语言while 语句,这里对while 循环做详细讲解,并提供示例代码,希望能帮助学习C语言的同学
    2016-07-07
  • C++数据结构之实现循环顺序队列

    C++数据结构之实现循环顺序队列

    这篇文章主要介绍了 C++数据结构之实现循环顺序队列的相关资料,需要的朋友可以参考下
    2017-01-01
  • c语言轻松实现猜数字小游戏

    c语言轻松实现猜数字小游戏

    猜数字是兴起于英国的益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。游戏规则为一方出数字,一方猜,今天我们来用C实现这个游戏案例
    2022-04-04
  • C语言中的指针以及二级指针代码详解

    C语言中的指针以及二级指针代码详解

    这篇文章主要介绍了C语言中的指针以及二级指针代码详解,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • C++基于先序、中序遍历结果重建二叉树的方法

    C++基于先序、中序遍历结果重建二叉树的方法

    这篇文章主要介绍了C++基于先序、中序遍历结果重建二叉树的方法,结合实例形式分析了基于C++构建二叉树的相关操作技巧,需要的朋友可以参考下
    2017-05-05

最新评论