找回密码
 register

QQ登录

只需一步,快速开始

查看: 9|回复: 0

[C++] std::trunc 函数 将输入数值的小数部分丢弃 详细用法特性

[复制链接]

[C++] std::trunc 函数 将输入数值的小数部分丢弃 详细用法特性

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:153
  • 打卡月天数:2
  • 打卡总奖励:152
  • 最近打卡:2025-04-03 08:28:12
Waylee

主题

0

回帖

1万

积分

仙帝

积分
18932
Waylee 2025-4-3 10:06 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

基本介绍

功能:
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;
}

说明:

  • 对于 3.7,截断后得到 3.0;

  • 对于 -3.7,截断后得到 -3.0(注意,与 std::floor(-3.7) 返回 -4.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;
}
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-4-4 06:37 , Processed in 0.113244 second(s), 6 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表