0

我目前正在制作一个 C++ 库,该库涉及从公历日期减去月份。我的加月有效,但我的减法公式不起作用并导致错误。这是我的减法公式的代码:

 Gregorian operator - ( Gregorian const& dt, detail::packaged_month const& month ) {
        year_t yearsToSubtract = month.nMonths_ / 12;
        month_t monthsToSubtract = month.nMonths_ % 12;
        year_t y = dt.year() - yearsToSubtract;
        month_t m = dt.month() - monthsToSubtract;

        int adjustment = ( m - 1 ) / 12 + ( m - 12 ) / 12;
        y -= adjustment;
        m += month_t( adjustment * 12 );

        day_t d = std::min( dt.day(), gregorian_days_in_month( m, is_gregorian_leapyear( y ) ) );

        return Gregorian( y, m, d );
    }

结果应该是,如果我将开始日期设为 2001、2、1 或 2001 年 2 月 1 日和负 4 个月,它应该返回 2000 年 10 月 1 日,但我收到一个数组异常错误。

4

1 回答 1

0

当我使用您的示例并假设月份为 1-12(而不是 0-11)并且所有值都可以转换为整数时,我得到以下值(在您的代码中声明/修改它们的行):

yearsToSubtract = 0
monthsToSubtract = 4
y = 2001
m = -2

adjustment = -1
y = 2002
m = -14

所以假设我理解正确并且你的调试器支持我,我会从第一行开始,这不是你所期望的,然后从那里开始。我希望那条线要么是第一条,要么madjustment.

于 2013-10-15T21:28:45.137 回答