gpt4 book ai didi

c++ - 如何将 ‘std::chrono::duration>’类型转换为 ‘int’类型?

转载 作者:太空狗 更新时间:2023-10-29 20:10:24 39 4
gpt4 key购买 nike

我正在使用 Howard Hinnant's date library ,并尝试找出两个日期之间的总月数。

invalid static_cast from type ‘std::chrono::duration<int, std::ratio<2629746l, 1l> >’ to type ‘int’
int period = static_cast<int>(period_in_months(start_date, end_date));

以下是我正在使用的函数:

auto period_in_months(year_month_day start_date, year_month_day end_time) {
auto total_months = ((end_time.year() - start_date.year())*12 + (end_time.month() - start_date.month()));
return (total_months--);
}

double percentage_return(string risk_profile, year_month_day start_date, year_month_day end_date) {
int period = static_cast<int>(period_in_months(start_date, end_date));
// do something
}

我尝试使用 chrono::duration_cast<int>(period_in_months(start_date, end_date)但收到了同样的错误。

最佳答案

这是一篇关于这个主题的文章:

https://github.com/HowardHinnant/date/wiki/Examples-and-Recipes#deltamonths

文章以更多问题开头:

Do we want the number of "full months"? Or perhaps we should round to the nearest number of integral months? Or do we want a floating-point representation of months which can show fractional months?

给定两个 year_month_day 对象 d1d2,这里是截断为零的月份差异:

(d2.year()/d2.month() - d1.year()/d1.month())

这将返回一个名为 monthschrono 持续时间。

上面完全忽略了每个日期的day字段。如果您想考虑日期字段并向最近的方向四舍五入:

auto dp1 = sys_days(d1);
auto dp2 = sys_days(d2);
auto delta = round<months>(dp2-dp1);

还有一种方法可以获得文章中显示的浮点月份的差异。

一旦你有了一个任意精度的 chrono 持续时间,用任何表示,就可以用 .count() 的成员函数得到那个表示的值 计时::持续时间:

cout << delta.count() << '\n';

关于c++ - 如何将 ‘std::chrono::duration<int, std::ratio<2629746l, 1l>>’类型转换为 ‘int’类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40084694/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com