| 基本介绍功能:std::trunc 将输入数值的小数部分丢弃,返回其整数部分。与 std::floor(向下取整)和 std::ceil(向上取整)不同,std::trunc 始终向零截断。
 
对正数:效果等同于取整数部分,例如 std::trunc(3.7) 返回 3.0。对负数:同样舍弃小数部分,例如 std::trunc(-3.7) 返回 -3.0。 头文件:使用前需包含 <cmath>。
 返回类型:返回与参数相同类型的浮点数(例如 double、float 或 long double)。
 基本用法示例示例 1:基本截断#include <iostream>
#include <cmath>
int main() {
    double a = 3.7;
    double b = -3.7;
    std::cout << "std::trunc(" << a << ") = " << std::trunc(a) << std::endl; // 输出 3.0
    std::cout << "std::trunc(" << b << ") = " << std::trunc(b) << std::endl; // 输出 -3.0
    return 0;
}
 说明: 隐式类型转换当传入整数或其他数据类型时,std::trunc 会隐式转换为对应的浮点数,返回值依然为浮点型。如果需要得到整型结果,需要显式转换: #include <iostream>
#include <cmath>
int main() {
    double value = 5.99;
    // 先调用 std::trunc,然后显式转换为 int
    int truncatedValue = static_cast<int>(std::trunc(value));
    std::cout << "截断后的整数为 " << truncatedValue << std::endl; // 输出 5
    return 0;
}
 处理特殊数值std::trunc 对于 NaN(非数字)和无穷大(正无穷、负无穷)的行为遵循 IEEE 浮点标准: 
NaN:输入 NaN 时返回 NaN。
无穷大:正无穷和负无穷保持不变。 #include <iostream>
#include <cmath>
#include <limits>
int main() {
    double nanVal = std::nan("");
    double posInf = std::numeric_limits<double>::infinity();
    double negInf = -std::numeric_limits<double>::infinity();
    std::cout << "std::trunc(NaN) = " << std::trunc(nanVal) << std::endl;
    std::cout << "std::trunc(+inf) = " << std::trunc(posInf) << std::endl;
    std::cout << "std::trunc(-inf) = " << std::trunc(negInf) << std::endl;
    return 0;
}
 constexpr 与编译期计算在支持 C++11/14/17/20 的环境中,如果 std::trunc 被声明为 constexpr(这取决于具体的编译器和标准库实现),可以在编译期求值。但实际使用时,请查阅相关编译器文档确认是否支持 constexpr 版本。 #include <iostream>
#include <cmath>
constexpr double computeTrunc() {
    return std::trunc(3.14159);
}
int main() {
    constexpr double value = computeTrunc();  // 编译期计算(若支持)
    std::cout << "编译期计算结果:std::trunc(3.14159) = " << value << std::endl;
    return 0;
}
 |