开发者

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::ceilstd::floorstd::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)。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜