# std::floor, std::floorf, std::floorl

< cpp‎ | numeric‎ | math

定义于头文件 `<cmath>` |  |
| (1) |
float floor ( float arg ); |  |
float floorf( float arg ); |  | (C++11 起)
double floor ( double arg ); | (2) |
| (3) |
long double floor ( long double arg ); |  |
long double floorl( long double arg ); |  | (C++11 起)
double floor ( IntegralType arg ); | (4) | (C++11 起)

1-3) 计算不大于 `arg` 的最大整数值。
4) 接受任何整数类型参数的重载集或函数模板。等价于 2) （将参数转型为 double ）。

### 参数

arg | - | 浮点值

### 返回值

若不出现错误，则返回不大于 `arg` 的最大整数值，即 ⌊arg⌋ 。

返回值
参数

### 错误处理

报告 math_errhandling 中指定的错误。

若实现支持 IEEE 浮点算术（ IEC 60559 ），则

- 当前舍入方式无效。
- 若 `arg` 为 ±∞ ，则返回不修改的参数
- 若 `arg` 为 ±0 ，则返回不修改的参数
- 若 arg 为 NaN ，则返回 NaN

### 注意

在舍入非整数有限值时可以（但不要求）引发 FE_INEXACT 。

所有标准浮点格式中，最大可表示浮点值准确地为整数，故此函数自身决不上溢；然而存储于整数对象时，结果可能溢出任何整数类型（包含 std::intmax_t ）。

### 示例

    #include <cmath>
    #include <iostream>
    int main()
    {
        std::cout << std::fixed
                  << "floor(+2.7) = " << std::floor(+2.7) << '\n'
                  << "floor(-2.7) = " << std::floor(-2.7) << '\n'
                  << "floor(-0.0) = " << std::floor(-0.0) << '\n'
                  << "floor(-Inf) = " << std::floor(-INFINITY) << '\n';
    }

输出：

    floor(+2.7) = 2.000000
    floor(-2.7) = -3.000000
    floor(-0.0) = -0.000000
    floor(-Inf) = -inf

### 参阅

ceil ceilf ceill (C++11)(C++11) | 不小于给定值的最接近整数值 (函数)
trunc truncf truncl (C++11)(C++11)(C++11) | 绝对值不大于给定值的最接近整数 (函数)
round roundf roundl lround lroundf lroundl llround llroundf llroundl (C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) | 最接近整数，中间情况下向远离零舍入 (函数)