【问题标题】:Getting duration value as double将持续时间值设为双倍
【发布时间】:2020-07-02 02:29:59
【问题描述】:

假设,我有以下持续时间值:

auto duration=12h+15min+99s+99ms;

我想知道这是多少小时(作为双精度值)。

当我执行auto hours=std::chrono::duration_cast<std::chrono::hours>(duration) 时,我得到hours.count(),即int。将整个持续时间的值表示为 double 的正确方法是什么?

【问题讨论】:

  • 这对我来说听起来像是初等数学。一分钟是一小时的 1/60,所以将分钟除以 60 得到多少小时,然后将其加到总小时数上得到总和?泡沫,冲洗,重复,几秒钟和几毫秒。我认为没有任何正当理由为此使用 chrono 库中的任何内容。您不清楚这个简单的数学计算的哪一部分?
  • 是的,当然。我要问的是是否有一种简单/默认的方法可以从 chrono 库中获取我想要的值
  • @SamVarshavchik 我想介绍一个反例 - 具有初始状态,使用迭代器和哨兵在一个范围内迭代,并对它们应用一些逻辑/功能是基本的。然而我们确实有std::accumulate。我很能看出这个问题的意义。

标签: c++ duration chrono


【解决方案1】:
using namespace std::chrono;

// Create a double-based hours duration unit
using dhours = duration<double, hours::period>;

// Assign your integral-based duration to it
dhours h = 12h+15min+99s+99ms;

// Get the value
cout << h.count();

或者,简单地将基于整数的持续时间除以一个基于双精度的hours

cout << (12h+15min+99s+99ms)/1.0h << '\n';

【讨论】:

    【解决方案2】:
    #include<iostream>
    #include<chrono>
    using namespace std::chrono_literals;
    
    int main() {
    
    
        auto duration = 12.0h+15min+99s+99ms;
        std::cout << std::chrono::duration_cast<std::chrono::duration<long double,std::ratio<3600,1>>>(duration).count();
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2017-12-18
      • 2012-01-10
      • 1970-01-01
      • 2017-03-19
      • 2020-09-05
      • 2021-10-18
      相关资源
      最近更新 更多