конвертирование boost :: gregorian :: date_duration в удвоение - PullRequest
1 голос
/ 30 августа 2011

Есть ли способ преобразовать boost :: date_duration в double.У меня есть следующий код:

date be; 
date bd;
days t = (be - bd);
std::cout << "days are:" << t << std::endl;

Это отлично работает и возвращает нет.дней.Но я хочу получить значение в годах, так что, если я разделю t на 365, он показывает только 0. setprecision() тоже не помогло.

1 Ответ

3 голосов
/ 30 августа 2011

Вы, вероятно, пойманы тем фактом, что boost::gregorian::days перегружает operator/. Сначала преобразуйте в целое число, используя days(), а затем разделите на значение с плавающей точкой, чтобы получить деление с плавающей точкой.

#include <iostream>
#include <boost/date_time.hpp>

int main()
{
    boost::gregorian::date be(2000, 1, 1), bd(1950, 1, 1);
    boost::gregorian::days t = be - bd;
    std::cout << "days are: " << t << '\n'
              << "days/365 = " << t.days()/365.0 << '\n';
}

Обратите внимание на результат: ваш результат не равен количеству лет, потому что год не 365,00 дней.

...