在浮动中获得计时秒

时间:2016-02-18 16:06:18

标签: c++ floating-point chrono seconds

http://en.cppreference.com/w/cpp/chrono的示例中,在double中获取秒值。这是我想要的行为。然而,这似乎依赖于隐含的假设,即时间点减法产生表示秒的值。我找不到任何解释为什么持续时间在没有实际指定时间单位时产生浮点秒的原因。根本不使用auto,有人可以展示如何在浮点类型中显式获取时间单位,例如秒,或者指向文档或解释为什么上述转换代表秒数?

有问题的转换基本上是:

std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit?
double secondsInDouble = elapsed_seconds.count();

有关转换的示例,请参阅以下帖子。

How to get duration, as int milli's and float seconds from <chrono>?

C++ chrono - get duration as float or long long

getting chrono time in specific way

Chrono Timer Not Converting Seconds Properly

1 个答案:

答案 0 :(得分:5)

根据:http://en.cppreference.com/w/cpp/chrono/duration,第二个模板参数的默认比率是1:1,意味着秒。

其他值是相对于该比率的比率。例如,std::chrono::milliseconds的比率为1:1000 http://en.cppreference.com/w/cpp/numeric/ratio/ratio

所以这句话:

std::chrono::duration<double> elapsed_seconds = end-start;

相当于:

std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start;

定义为从中导出所有其他比率的秒数。

中转换为end - start时定义的任何单位std::ratio<1>

如果您想要以毫秒为单位的时间:

std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start;

end - start应根据新比例进行转换。