Как я могу конвертировать из секунд в минуты, используя эту библиотеку? - PullRequest
1 голос
/ 02 октября 2019

У меня есть программа , которая использует эту популярную библиотеку , но я пытаюсь использовать ее для преобразования из секунд в минуты

Следующий код ...

#include <iostream>

#include "units.h"

int main(int argc, const char * argv[])
{
    {
        long double one = 1.0;

        units::time::second_t seconds;
        units::time::minute_t minutes(one);

        seconds = minutes;

        std::cout << "1 minute is " << seconds << std::endl;
    }


    {
        long double one = 1.0;

        units::time::second_t seconds(one);
        units::time::minute_t minutes;

        minutes = seconds;

        std::cout << "1 second is " << minutes << std::endl;
    }

    return 0;
}

производит ...

1 minute is 60 s
1 second is 1 s

однако я бы ожидал, что он произведет ...

1 minute is 60 s
1 second is .016666667 m

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Библиотека предлагает метод units::convert, проверьте документ здесь .

Вот рабочий фрагмент:

    long double one = 1.0;

    units::time::second_t seconds(one);
    units::time::minute_t minutes;

    minutes = seconds;

    std::cout << "1 second is " << minutes << std::endl;
    std::cout << "1 second is "
              << units::convert<units::time::seconds, units::time::minutes>(seconds)
              << std::endl;

Более подробно я предлагаю поискать в документ .

2 голосов
/ 02 октября 2019

Я не знаю, какую библиотеку вы используете, но в C ++ 11 добавлен класс std::chrono::duration, который, кажется, может делать то, что вы хотите:

#include <chrono>
#include <iostream>
int main()
{
    {
        std::chrono::minutes minutes(1);
        std::chrono::seconds seconds;

        seconds = minutes;

        std::cout << "1 minute is " << seconds.count() << std::endl;
    }

    {
        std::chrono::seconds seconds(1);
        using fMinutes = std::chrono::duration<float, std::chrono::minutes::period>;
        fMinutes minutes = seconds;

        std::cout << "1 second is " << minutes.count() << std::endl;
    }

    return 0;
}

Обратите внимание, что по умолчанию std::chrono::minutes использует счетчик целых чисел и, таким образом, сообщает, что 1 секунда равна 0 минутам. Вот почему я определяю свои собственные float-минуты.

В любом случае, вышеприведенная программа выдает следующий вывод:

1 minute is 60
1 second is 0.0166667
...