示例#1
0
 /**
  * AMORLINC
  *
  * Returns the depreciation for each accounting period.
  * This function is provided for the French accounting system. If an asset is purchased in
  * the middle of the accounting period, the prorated depreciation is taken into account.
  *
  * Excel Function:
  *		AMORLINC(cost,purchased,firstPeriod,salvage,period,rate[,basis])
  *
  * @access	public
  * @category Financial Functions
  * @param	float	cost		The cost of the asset.
  * @param	mixed	purchased	Date of the purchase of the asset.
  * @param	mixed	firstPeriod	Date of the end of the first period.
  * @param	mixed	salvage		The salvage value at the end of the life of the asset.
  * @param	float	period		The period.
  * @param	float	rate		Rate of depreciation.
  * @param	integer	basis		The type of day count to use.
  *										0 or omitted	US (NASD) 30/360
  *										1				Actual/actual
  *										2				Actual/360
  *										3				Actual/365
  *										4				European 30/360
  * @return	float
  */
 public static function AMORLINC($cost, $purchased, $firstPeriod, $salvage, $period, $rate, $basis = 0)
 {
     $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost);
     $purchased = PHPExcel_Calculation_Functions::flattenSingleValue($purchased);
     $firstPeriod = PHPExcel_Calculation_Functions::flattenSingleValue($firstPeriod);
     $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage);
     $period = PHPExcel_Calculation_Functions::flattenSingleValue($period);
     $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate);
     $basis = is_null($basis) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis);
     $fOneRate = $cost * $rate;
     $fCostDelta = $cost - $salvage;
     //	Note, quirky variation for leap years on the YEARFRAC for this function
     $purchasedYear = PHPExcel_Calculation_DateTime::YEAR($purchased);
     $yearFrac = PHPExcel_Calculation_DateTime::YEARFRAC($purchased, $firstPeriod, $basis);
     if ($basis == 1 && $yearFrac < 1 && PHPExcel_Calculation_DateTime::_isLeapYear($purchasedYear)) {
         $yearFrac *= 365 / 366;
     }
     $f0Rate = $yearFrac * $rate * $cost;
     $nNumOfFullPeriods = intval(($cost - $salvage - $f0Rate) / $fOneRate);
     if ($period == 0) {
         return $f0Rate;
     } elseif ($period <= $nNumOfFullPeriods) {
         return $fOneRate;
     } elseif ($period == $nNumOfFullPeriods + 1) {
         return $fCostDelta - $fOneRate * $nNumOfFullPeriods - $f0Rate;
     } else {
         return 0.0;
     }
 }
 /**
  * _daysPerYear
  *
  * Returns the number of days in a specified year, as defined by the "basis" value
  *
  * @param    integer $year            The year against which we're testing
  * @param   integer  $basis           The type of day count:
  *                                    0 or omitted US (NASD)    360
  *                                    1                        Actual (365 or 366 in a leap year)
  *                                    2                        360
  *                                    3                        365
  *                                    4                        European 360
  *
  * @return    integer
  */
 private static function _daysPerYear($year, $basis = 0)
 {
     switch ($basis) {
         case 0:
         case 2:
         case 4:
             $daysPerYear = 360;
             break;
         case 3:
             $daysPerYear = 365;
             break;
         case 1:
             $daysPerYear = PHPExcel_Calculation_DateTime::_isLeapYear($year) ? 366 : 365;
             break;
         default:
             return PHPExcel_Calculation_Functions::NaN();
     }
     return $daysPerYear;
 }