I have forgotten
my Password

Or login with:

  • Facebookhttp://facebook.com/
  • Googlehttps://www.google.com/accounts/o8/id
  • Yahoohttps://me.yahoo.com
get GPL
COST (GBP)
this unit 1.87
sub units 5.88
+
0
FinanceBanking

year Fraction

viewed 2931 times and licensed 60 times
Computes the fraction of the year between two serial dates, Excel: YEARFRAC
Controller: CodeCogs

get GPL add to cart

Dependents

Info

Interface

C++

YearFraction

 
doubleyearFractionintstartDate
intendDate
YearBasisbasis = yb_USA )
Returns a number between 0 and 1 (normally), which represents the fraction of the year between two serial Julian dates:

If there is more than 1 year between the dates, then this value will be greater than 1.

The European or USA 360-day accounting system (with 30 days months - see dateDiff360), applies the following transformation to the start and end dates.
TypeDescription
dd_EuropeStart or end dates that occur on the 31st of a month become equal to the 30th of the same month.
dd_USAThis 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

TypeValueDescription
yb_US0US (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_Act1Uses the exact number of elapsed days between the two dates, as well as the exact length of the year.
yb_Act3602Uses the exact number of elapsed days between two dates but assumes the year only have 360 days
yb_Act3653Uses the exact number of elapsed days between two dates but assumes the year always has 365 days
yb_EU4European 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

startDateand...
endDateare serial Julian dates (see date). Note the return value is not signed, so the two dates can be swapped.
basisis 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.