如何在不同std::chrono duration类型之间实现转换?
std::chrono::nanoseconds 转换为 std::chrono::seconds 的方法
方法一:使用 std::chrono::duration_cast(推荐)
这是C++标准库提供的类型安全转换方式,专门用于不同chrono时长单位间的转换:
#include <chrono> #include <iostream> int main() { std::chrono::nanoseconds ns(1234567890); // 定义1.23456789秒的纳秒时长 // 转换为整数型秒(自动截断小数部分) std::chrono::seconds sec = std::chrono::duration_cast<std::chrono::seconds>(ns); std::cout << sec.count() << " seconds" << std::endl; // 输出:1 return 0; }
补充:保留小数部分的转换
如果需要保留秒的小数部分,可以转换为浮点型的duration:
// 转换为浮点型秒 std::chrono::duration<double, std::ratio<1>> sec_float = ns; std::cout << sec_float.count() << " seconds" << std::endl; // 输出:1.23457
方法二:手动计数值计算(不推荐)
也可以通过获取纳秒的计数值,除以1e9(秒与纳秒的换算系数)来构造秒时长,但这种方式缺乏类型安全,容易出错:
std::chrono::seconds sec(ns.count() / 1000000000);
注意:
duration_cast采用截断取整,而非四舍五入。如果需要四舍五入逻辑,需自行额外处理。
内容的提问来源于stack exchange,提问作者user19865469
相关产品推荐
相关产品推荐

