year Fraction
Computes the fraction of the year between two serial dates,
Excel: YEARFRAC
Controller: CodeCogs
Dependents
Interface
C++
YearFraction
doubleyearFraction( | int | startDate | |
int | endDate | ||
YearBasis | basis = yb_USA | ) |
Type | Description |
dd_Europe | Start or end dates that occur on the 31st of a month become equal to the 30th of the same month. |
dd_USA | This is identical to the European system with one exception that applies only to end dates: If the end date occurs on the 31st of a month it is moved to the 1st of the next month if the start date is earlier than the 30th. This method is sometime also called the 'NASD' method. |
Example 1
#include <stdio.h> #include <codecogs/units/date/date.h> #include <codecogs/units/date/isleapyear.h> #include <codecogs/finance/banking/yearfraction.h> using namespace Units::Date; using namespace Finance::Banking; int main() { printf("\n StartDate EndDate Basis: 0 (USA) 1 2 3 4 (European)"); int adate=date("25 Dec 2003"); for(int i=0;i<200;i+=20) { int d,m,y; dateYMD(adate, y, m, d); printf("\n %2d-%2d-%d", d,m,y); dateYMD(adate+i, y, m, d); printf(" %2d-%2d-%d", d,m,y); printf(" %5.3lf %5.3lf %5.3lf %5.3lf %5.3lf", yearFraction(adate, adate+i, yb_USA), // USA yearFraction(adate, adate+i, yb_Act), // Actual/Actual yearFraction(adate, adate+i, yb_Act360), // Actual/360 yearFraction(adate, adate+i, yb_Act365), // Actual/365 yearFraction(adate, adate+i, yb_EU)); // European } return 0; }
Output:StartDate EndDate Basis: 0 (USA) 1 2 3 4 (European) 25-12-2003 25-12-2003 0.000 0.000 0.000 0.000 0.000 25-12-2003 14- 1-2004 0.053 0.055 0.056 0.055 0.053 25-12-2003 3- 2-2004 0.106 0.110 0.111 0.110 0.106 25-12-2003 23- 2-2004 0.161 0.164 0.167 0.164 0.161 25-12-2003 14- 3-2004 0.219 0.219 0.222 0.219 0.219 25-12-2003 3- 4-2004 0.272 0.273 0.278 0.274 0.272 25-12-2003 23- 4-2004 0.328 0.328 0.333 0.329 0.328 25-12-2003 13- 5-2004 0.383 0.383 0.389 0.384 0.383 25-12-2003 2- 6-2004 0.436 0.437 0.444 0.438 0.436 25-12-2003 22- 6-2004 0.492 0.492 0.500 0.493 0.492
Type | Value | Description |
yb_US | 0 | US (NASD) 30/360 - As with the European 30/360 (yb_EU, with the additional provision that if the end date occurs on the 31st of a month it is moved to the 1st of the next month if the start date is earlier than the 30th. |
yb_Act | 1 | Uses the exact number of elapsed days between the two dates, as well as the exact length of the year. |
yb_Act360 | 2 | Uses the exact number of elapsed days between two dates but assumes the year only have 360 days |
yb_Act365 | 3 | Uses the exact number of elapsed days between two dates but assumes the year always has 365 days |
yb_EU | 4 | European 30/360 - Each month is assumed to have 30 days, such that the year has only 360 days. Start and end dates that occur on the 31st of a month become equal to the 30th of the same month. |
Parameters
startDate and... endDate are serial Julian dates (see date). Note the return value is not signed, so the two dates can be swapped. basis is the day counting system to use:
Source Code
Source code is available when you agree to a GP Licence or buy a Commercial Licence.
Not a member, then Register with CodeCogs. Already a Member, then Login.