【问题标题】:Determine the part of chrono durations确定计时持续时间的一部分
【发布时间】:2018-07-10 10:10:07
【问题描述】:

我想计算一个持续时间的哪一部分包含在另一个持续时间中。有standard implementation for integers (6),但它给了我0(由于整数除法)以下示例:

auto s = 1s;
auto ms = 200ms;
std::cout << ms / s; // 0, but I want 0.2 here

有没有更优雅和通用的方法来计算这样的值,而不是下面的ugly solution

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono_literals;    

    auto s = 1s;
    auto ms = 200ms;

    const auto part = 1. * ms.count() / std::chrono::duration_cast<decltype(ms)>(s).count();

    std::cout << part << '\n';
}

一种聪明的方法是使用1. / (s / ms);,但它不适合任何持续时间类型。

【问题讨论】:

    标签: c++ chrono


    【解决方案1】:

    使用基于double 的持续时间。

    #include <chrono>
    #include <iostream>
    
    int main()
    {
        using namespace std::chrono_literals;    
        using my_seconds = std::chrono::duration<double>;
    
        my_seconds s = 1s;
        my_seconds ms = 200ms;
    
        std::cout << ms / s << '\n';
    }
    

    【讨论】:

    • 使用带有强制转换的旧类型也可以std::chrono::duration_cast&lt;my_seconds&gt;(ms) / s。谢谢!
    • @alexolut: ms 将隐式转换为my_seconds,无需使用duration_cast: my_seconds{ms} / s。最好只为您希望强制截断的时间保留duration_cast
    猜你喜欢
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多