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> 提供的标准函数,它们更通用且可读性更好。

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

相关文章

  • C++中char*转换为LPCWSTR的解决方案

    C++中char*转换为LPCWSTR的解决方案

    最近在学习C++,遇到了一个char*转换为LPCWSTR的问题,通过查找资料终于解决了,所以下面这篇文章主要介绍了C++中char*转LPCWSTR的解决方案,文中通过详细的示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • 线程按指定顺序输出字符到数组的实例代码

    线程按指定顺序输出字符到数组的实例代码

    这篇文章主要介绍了线程按指定顺序输出字符到数组的实例代码,需要的朋友可以参考下
    2014-02-02
  • C语言完全平方整数的判断

    C语言完全平方整数的判断

    大家好,本篇文章主要讲的是C语言完全平方整数的判断,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C/C++中getline函数案例总结

    C/C++中getline函数案例总结

    这篇文章主要介绍了C/C++中getline函数案例总结,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C语言如何解决约瑟夫环问题

    C语言如何解决约瑟夫环问题

    文章总结了四种解决特定问题的方法,包括单循环链表法、循环数组法、递归法和迭代法,并分享了个人经验
    2024-12-12
  • C++中类的成员函数及内联函数使用及说明

    C++中类的成员函数及内联函数使用及说明

    这篇文章主要介绍了C++中类的成员函数及内联函数使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Qt实现简易计时器的示例代码

    Qt实现简易计时器的示例代码

    计时器实现四个功能:开始计时、停止计时、暂停计时以及打点。当点击暂停时,开始按钮和停止按钮无法点击。当点击停止时,开始按钮和暂停按钮无法点击,此时停止按钮变为清零。本文将用Qt实现这样的一个计时器,需要的可以参考一下
    2022-06-06
  • C/C++在VScode中的配置教程详解

    C/C++在VScode中的配置教程详解

    这篇文章主要介绍了C/C++在VScode中的配置教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C语言实现电话簿管理系统

    C语言实现电话簿管理系统

    这篇文章主要为大家详细介绍了C语言实现电话簿管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 深入了解C++中map用法

    深入了解C++中map用法

    下面小编就为大家带来一篇深入了解C++中map用法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随想过来看看吧
    2016-06-06

最新评论