确定计时持续时间的一部分

时间:2018-07-10 10:10:07

标签: c++ chrono

我想计算一个持续时间的哪一部分包含在另一个持续时间中。有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);,但不适用于任何持续时间类型。

1 个答案:

答案 0 :(得分:5)

使用基于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';
}