Additional argument validation

git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@88996 2327b42d-5241-43d6-9e2a-de5ac946f064
This commit is contained in:
Mark Baker 2012-04-08 20:39:24 +00:00
parent 193a766ab3
commit c284eef55e
1 changed files with 59 additions and 24 deletions

View File

@ -203,13 +203,15 @@ class PHPExcel_Calculation_Financial {
$issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue); $issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue);
$firstinterest = PHPExcel_Calculation_Functions::flattenSingleValue($firstinterest); $firstinterest = PHPExcel_Calculation_Functions::flattenSingleValue($firstinterest);
$settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement);
$rate = (float) PHPExcel_Calculation_Functions::flattenSingleValue($rate); $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate);
$par = (is_null($par)) ? 1000 : (float) PHPExcel_Calculation_Functions::flattenSingleValue($par); $par = (is_null($par)) ? 1000 : PHPExcel_Calculation_Functions::flattenSingleValue($par);
$frequency = (is_null($frequency)) ? 1 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); $frequency = (is_null($frequency)) ? 1 : PHPExcel_Calculation_Functions::flattenSingleValue($frequency);
$basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); $basis = (is_null($basis)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($basis);
// Validate // Validate
if ((is_numeric($rate)) && (is_numeric($par))) { if ((is_numeric($rate)) && (is_numeric($par))) {
$rate = (float) $rate;
$par = (float) $par;
if (($rate <= 0) || ($par <= 0)) { if (($rate <= 0) || ($par <= 0)) {
return PHPExcel_Calculation_Functions::NaN(); return PHPExcel_Calculation_Functions::NaN();
} }
@ -251,12 +253,14 @@ class PHPExcel_Calculation_Financial {
public static function ACCRINTM($issue, $settlement, $rate, $par=1000, $basis=0) { public static function ACCRINTM($issue, $settlement, $rate, $par=1000, $basis=0) {
$issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue); $issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue);
$settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement);
$rate = (float) PHPExcel_Calculation_Functions::flattenSingleValue($rate); $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate);
$par = (is_null($par)) ? 1000 : (float) PHPExcel_Calculation_Functions::flattenSingleValue($par); $par = (is_null($par)) ? 1000 : PHPExcel_Calculation_Functions::flattenSingleValue($par);
$basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); $basis = (is_null($basis)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($basis);
// Validate // Validate
if ((is_numeric($rate)) && (is_numeric($par))) { if ((is_numeric($rate)) && (is_numeric($par))) {
$rate = (float) $rate;
$par = (float) $par;
if (($rate <= 0) || ($par <= 0)) { if (($rate <= 0) || ($par <= 0)) {
return PHPExcel_Calculation_Functions::NaN(); return PHPExcel_Calculation_Functions::NaN();
} }
@ -902,14 +906,19 @@ class PHPExcel_Calculation_Financial {
* @return float * @return float
*/ */
public static function DB($cost, $salvage, $life, $period, $month=12) { public static function DB($cost, $salvage, $life, $period, $month=12) {
$cost = (float) PHPExcel_Calculation_Functions::flattenSingleValue($cost); $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost);
$salvage = (float) PHPExcel_Calculation_Functions::flattenSingleValue($salvage); $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage);
$life = (int) PHPExcel_Calculation_Functions::flattenSingleValue($life); $life = PHPExcel_Calculation_Functions::flattenSingleValue($life);
$period = (int) PHPExcel_Calculation_Functions::flattenSingleValue($period); $period = PHPExcel_Calculation_Functions::flattenSingleValue($period);
$month = (int) PHPExcel_Calculation_Functions::flattenSingleValue($month); $month = PHPExcel_Calculation_Functions::flattenSingleValue($month);
// Validate // Validate
if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life)) && (is_numeric($period)) && (is_numeric($month))) { if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life)) && (is_numeric($period)) && (is_numeric($month))) {
$cost = (float) $cost;
$salvage = (float) $salvage;
$life = (int) $life;
$period = (int) $period;
$month = (int) $month;
if ($cost == 0) { if ($cost == 0) {
return 0.0; return 0.0;
} elseif (($cost < 0) || (($salvage / $cost) < 0) || ($life <= 0) || ($period < 1) || ($month < 1)) { } elseif (($cost < 0) || (($salvage / $cost) < 0) || ($life <= 0) || ($period < 1) || ($month < 1)) {
@ -964,14 +973,19 @@ class PHPExcel_Calculation_Financial {
* @return float * @return float
*/ */
public static function DDB($cost, $salvage, $life, $period, $factor=2.0) { public static function DDB($cost, $salvage, $life, $period, $factor=2.0) {
$cost = (float) PHPExcel_Calculation_Functions::flattenSingleValue($cost); $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost);
$salvage = (float) PHPExcel_Calculation_Functions::flattenSingleValue($salvage); $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage);
$life = (int) PHPExcel_Calculation_Functions::flattenSingleValue($life); $life = PHPExcel_Calculation_Functions::flattenSingleValue($life);
$period = (int) PHPExcel_Calculation_Functions::flattenSingleValue($period); $period = PHPExcel_Calculation_Functions::flattenSingleValue($period);
$factor = (float) PHPExcel_Calculation_Functions::flattenSingleValue($factor); $factor = PHPExcel_Calculation_Functions::flattenSingleValue($factor);
// Validate // Validate
if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life)) && (is_numeric($period)) && (is_numeric($factor))) { if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life)) && (is_numeric($period)) && (is_numeric($factor))) {
$cost = (float) $cost;
$salvage = (float) $salvage;
$life = (int) $life;
$period = (int) $period;
$factor = (float) $factor;
if (($cost <= 0) || (($salvage / $cost) < 0) || ($life <= 0) || ($period < 1) || ($factor <= 0.0) || ($period > $life)) { if (($cost <= 0) || (($salvage / $cost) < 0) || ($life <= 0) || ($period < 1) || ($factor <= 0.0) || ($period > $life)) {
return PHPExcel_Calculation_Functions::NaN(); return PHPExcel_Calculation_Functions::NaN();
} }
@ -999,12 +1013,18 @@ class PHPExcel_Calculation_Financial {
* *
* Returns the discount rate for a security. * Returns the discount rate for a security.
* *
* Excel Function:
* DISC(settlement,maturity,price,redemption[,basis])
*
* @access public
* @category Financial Functions
* @param mixed settlement The security's settlement date. * @param mixed settlement The security's settlement date.
* The security settlement date is the date after the issue date when the security is traded to the buyer. * The security settlement date is the date after the issue
* date when the security is traded to the buyer.
* @param mixed maturity The security's maturity date. * @param mixed maturity The security's maturity date.
* The maturity date is the date when the security expires. * The maturity date is the date when the security expires.
* @param int price The security's price per $100 face value. * @param int price The security's price per $100 face value.
* @param int redemption the security's redemption value per $100 face value. * @param int redemption The security's redemption value per $100 face value.
* @param int basis The type of day count to use. * @param int basis The type of day count to use.
* 0 or omitted US (NASD) 30/360 * 0 or omitted US (NASD) 30/360
* 1 Actual/actual * 1 Actual/actual
@ -1016,12 +1036,15 @@ class PHPExcel_Calculation_Financial {
public static function DISC($settlement, $maturity, $price, $redemption, $basis=0) { public static function DISC($settlement, $maturity, $price, $redemption, $basis=0) {
$settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement);
$maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity);
$price = (float) PHPExcel_Calculation_Functions::flattenSingleValue($price); $price = PHPExcel_Calculation_Functions::flattenSingleValue($price);
$redemption = (float) PHPExcel_Calculation_Functions::flattenSingleValue($redemption); $redemption = PHPExcel_Calculation_Functions::flattenSingleValue($redemption);
$basis = (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); $basis = PHPExcel_Calculation_Functions::flattenSingleValue($basis);
// Validate // Validate
if ((is_numeric($price)) && (is_numeric($redemption)) && (is_numeric($basis))) { if ((is_numeric($price)) && (is_numeric($redemption)) && (is_numeric($basis))) {
$price = (float) $price;
$redemption = (float) $redemption;
$basis = (int) $basis;
if (($price <= 0) || ($redemption <= 0)) { if (($price <= 0) || ($redemption <= 0)) {
return PHPExcel_Calculation_Functions::NaN(); return PHPExcel_Calculation_Functions::NaN();
} }
@ -1040,9 +1063,15 @@ class PHPExcel_Calculation_Financial {
/** /**
* DOLLARDE * DOLLARDE
* *
* Converts a dollar price expressed as an integer part and a fraction part into a dollar price expressed as a decimal number. * Converts a dollar price expressed as an integer part and a fraction
* part into a dollar price expressed as a decimal number.
* Fractional dollar numbers are sometimes used for security prices. * Fractional dollar numbers are sometimes used for security prices.
* *
* Excel Function:
* DOLLARDE(fractional_dollar,fraction)
*
* @access public
* @category Financial Functions
* @param float $fractional_dollar Fractional Dollar * @param float $fractional_dollar Fractional Dollar
* @param int $fraction Fraction * @param int $fraction Fraction
* @return float * @return float
@ -1070,9 +1099,15 @@ class PHPExcel_Calculation_Financial {
/** /**
* DOLLARFR * DOLLARFR
* *
* Converts a dollar price expressed as a decimal number into a dollar price expressed as a fraction. * 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. * Fractional dollar numbers are sometimes used for security prices.
* *
* Excel Function:
* DOLLARDE(decimal_dollar,fraction)
*
* @access public
* @category Financial Functions
* @param float $decimal_dollar Decimal Dollar * @param float $decimal_dollar Decimal Dollar
* @param int $fraction Fraction * @param int $fraction Fraction
* @return float * @return float