在c++的标准数学库中,floor函数用于实现向下取整的功能,它会返回不大于传入参数的最大整数值,返回值类型与传入参数的浮点类型一致。该函数主要处理浮点数的取整需求,是数值计算场景中非常常用的工具函数。

floor函数的基本信息
头文件引入
使用floor函数前需要引入对应的头文件,在c++中该函数的声明位于<cmath>头文件中,因此代码开头需要添加如下引入语句:
#include <cmath>
函数原型
floor函数针对不同浮点类型提供了重载版本,常见的函数原型如下:
double floor(double x);:处理double类型参数float floor(float x);:处理float类型参数,对应函数为floorflong double floor(long double x);:处理long double类型参数,对应函数为floorl
参数与返回值
floor函数仅接收一个浮点类型的参数x,返回值是小于等于x的最大整数,返回值的数据类型和参数x的类型保持一致。如果传入的参数是整数,返回值就是该整数本身;如果传入的是负数,返回值会比原数更小,例如floor(-2.3)的返回值是-3.0。
使用示例
基础用法示例
下面通过一段简单的代码展示floor函数对不同数值的处理结果:
#include <iostream>
#include <cmath>
int main() {
// 正数测试
double a = 3.7;
double res_a = floor(a);
std::cout << "floor(" << a << ")的结果是:" << res_a << std::endl;
// 负数测试
double b = -2.3;
double res_b = floor(b);
std::cout << "floor(" << b << ")的结果是:" << res_b << std::endl;
// 整数测试
double c = 5.0;
double res_c = floor(c);
std::cout << "floor(" << c << ")的结果是:" << res_c << std::endl;
// 零值测试
double d = 0.0;
double res_d = floor(d);
std::cout << "floor(" << d << ")的结果是:" << res_d << std::endl;
return 0;
}
上述代码的输出结果如下:
floor(3.7)的结果是:3 floor(-2.3)的结果是:-3 floor(5)的结果是:5 floor(0)的结果是:0
不同浮点类型的使用示例
floor函数也支持float和long double类型,示例代码如下:
#include <iostream>
#include <cmath>
int main() {
float f_val = 4.9f;
float f_res = floor(f_val); // 等价于floorf(f_val)
std::cout << "float类型测试,floor(" << f_val << ")的结果是:" << f_res << std::endl;
long double ld_val = 7.2l;
long double ld_res = floor(ld_val); // 等价于floorl(ld_val)
std::cout << "long double类型测试,floor(" << ld_val << ")的结果是:" << ld_res << std::endl;
return 0;
}
注意事项
- floor函数的返回值是浮点类型,如果需要得到整数类型的结果,需要手动进行类型转换,例如
int res = (int)floor(3.7);,转换时需要注意负数的转换结果是否符合预期。 - 不要混淆floor函数和ceil、round函数:ceil是向上取整,返回大于等于参数的最小整数;round是四舍五入取整,返回最接近参数的整数。
- 如果传入的参数是非数值(NaN),floor函数的返回值也是NaN,使用时如果需要处理异常数值,需要先做合法性判断。
常见取整函数对比
下面通过表格对比floor和其他常见取整函数的区别:
| 函数名 | 功能描述 | 示例(参数为3.7) | 示例(参数为-2.3) |
|---|---|---|---|
| floor | 向下取整,返回不大于参数的最大整数 | 3.0 | -3.0 |
| ceil | 向上取整,返回不小于参数的最小整数 | 4.0 | -2.0 |
| round | 四舍五入取整,返回最接近参数的整数 | 4.0 | -2.0 |
| trunc | 截断取整,直接去掉小数部分 | 3.0 | -2.0 |