C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++的ceil、floor和round用法

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

作者:咸鱼_要_翻身

文章介绍了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

负数情况

编译选项(某些编译器可能需要 -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> 提供的标准函数,它们更通用且可读性更好。

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

您可能感兴趣的文章:
阅读全文