/** * DOLLARFR * * Converts a dollar price expressed as a decimal number into a dollar price * expressed as a fraction. * Fractional dollar numbers are sometimes used for security prices. * * Excel Function: * DOLLARFR(decimal_dollar,fraction) * * @access public * @category Financial Functions * @param float $decimal_dollar Decimal Dollar * @param integer $fraction Fraction * @return float */ public static function DOLLARFR($decimal_dollar = Null, $fraction = 0) { $decimal_dollar = PHPExcel_Calculation_Functions::flattenSingleValue($decimal_dollar); $fraction = (int) PHPExcel_Calculation_Functions::flattenSingleValue($fraction); // Validate parameters if (is_null($decimal_dollar) || $fraction < 0) { return PHPExcel_Calculation_Functions::NaN(); } if ($fraction == 0) { return PHPExcel_Calculation_Functions::DIV0(); } $dollars = floor($decimal_dollar); $cents = fmod($decimal_dollar, 1); $cents *= $fraction; $cents *= pow(10, -ceil(log10($fraction))); return $dollars + $cents; }
/** * VARPA * * Calculates variance based on the entire population, including numbers, text, and logical values * * Excel Function: * VARPA(value1[,value2[, ...]]) * * @access public * @category Statistical Functions * @param mixed $arg,... Data values * @return float */ public static function VARPA() { // Return value $returnValue = PHPExcel_Calculation_Functions::DIV0(); $summerA = $summerB = 0; // Loop through arguments $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); $aCount = 0; foreach ($aArgs as $k => $arg) { if (is_string($arg) && PHPExcel_Calculation_Functions::isValue($k)) { return PHPExcel_Calculation_Functions::VALUE(); } elseif (is_string($arg) && !PHPExcel_Calculation_Functions::isMatrixValue($k)) { } else { // Is it a numeric value? if (is_numeric($arg) || is_bool($arg) || is_string($arg) & $arg != '') { if (is_bool($arg)) { $arg = (int) $arg; } elseif (is_string($arg)) { $arg = 0; } $summerA += $arg * $arg; $summerB += $arg; ++$aCount; } } } // Return if ($aCount > 0) { $summerA *= $aCount; $summerB *= $summerB; $returnValue = ($summerA - $summerB) / ($aCount * $aCount); } return $returnValue; }
/** * POWER * * Computes x raised to the power y. * * @param float $x * @param float $y * @return float */ public static function POWER($x = 0, $y = 2) { $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); $y = PHPExcel_Calculation_Functions::flattenSingleValue($y); // Validate parameters if ($x == 0.0 && $y == 0.0) { return PHPExcel_Calculation_Functions::NaN(); } elseif ($x == 0.0 && $y < 0.0) { return PHPExcel_Calculation_Functions::DIV0(); } // Return $result = pow($x, $y); return !is_nan($result) && !is_infinite($result) ? $result : PHPExcel_Calculation_Functions::NaN(); }
public function testDIV0() { $result = PHPExcel_Calculation_Functions::DIV0(); $this->assertEquals('#DIV/0!', $result); }
/** * POWER * * Computes x raised to the power y. * * @param float $x * @param float $y * @return float */ public static function POWER($x = 0, $y = 2) { $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); $y = PHPExcel_Calculation_Functions::flattenSingleValue($y); // Validate parameters if ($x == 0 && $y <= 0) { return PHPExcel_Calculation_Functions::DIV0(); } // Return return pow($x, $y); }