init
This commit is contained in:
commit
72a26edcff
22092 changed files with 2101903 additions and 0 deletions
127
lib/PhpSpreadsheet/Calculation/Financial/Dollar.php
Normal file
127
lib/PhpSpreadsheet/Calculation/Financial/Dollar.php
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheet\Calculation\Financial;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Exception;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\TextData\Format;
|
||||
|
||||
class Dollar
|
||||
{
|
||||
use ArrayEnabled;
|
||||
|
||||
/**
|
||||
* DOLLAR.
|
||||
*
|
||||
* This function converts a number to text using currency format, with the decimals rounded to the specified place.
|
||||
* The format used is $#,##0.00_);($#,##0.00)..
|
||||
*
|
||||
* @param mixed $number The value to format, or can be an array of numbers
|
||||
* Or can be an array of values
|
||||
* @param mixed $precision The number of digits to display to the right of the decimal point (as an integer).
|
||||
* If precision is negative, number is rounded to the left of the decimal point.
|
||||
* If you omit precision, it is assumed to be 2
|
||||
* Or can be an array of precision values
|
||||
*
|
||||
* @return array|string If an array of values is passed for either of the arguments, then the returned result
|
||||
* will also be an array with matching dimensions
|
||||
*/
|
||||
public static function format(mixed $number, mixed $precision = 2)
|
||||
{
|
||||
return Format::DOLLAR($number, $precision);
|
||||
}
|
||||
|
||||
/**
|
||||
* DOLLARDE.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Excel Function:
|
||||
* DOLLARDE(fractional_dollar,fraction)
|
||||
*
|
||||
* @param mixed $fractionalDollar Fractional Dollar
|
||||
* Or can be an array of values
|
||||
* @param mixed $fraction Fraction
|
||||
* Or can be an array of values
|
||||
*/
|
||||
public static function decimal(mixed $fractionalDollar = null, mixed $fraction = 0): array|string|float
|
||||
{
|
||||
if (is_array($fractionalDollar) || is_array($fraction)) {
|
||||
return self::evaluateArrayArguments([self::class, __FUNCTION__], $fractionalDollar, $fraction);
|
||||
}
|
||||
|
||||
try {
|
||||
$fractionalDollar = FinancialValidations::validateFloat(
|
||||
Functions::flattenSingleValue($fractionalDollar) ?? 0.0
|
||||
);
|
||||
$fraction = FinancialValidations::validateInt(Functions::flattenSingleValue($fraction));
|
||||
} catch (Exception $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
// Additional parameter validations
|
||||
if ($fraction < 0) {
|
||||
return ExcelError::NAN();
|
||||
}
|
||||
if ($fraction == 0) {
|
||||
return ExcelError::DIV0();
|
||||
}
|
||||
|
||||
$dollars = ($fractionalDollar < 0) ? ceil($fractionalDollar) : floor($fractionalDollar);
|
||||
$cents = fmod($fractionalDollar, 1.0);
|
||||
$cents /= $fraction;
|
||||
$cents *= 10 ** ceil(log10($fraction));
|
||||
|
||||
return $dollars + $cents;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
*
|
||||
* @param mixed $decimalDollar Decimal Dollar
|
||||
* Or can be an array of values
|
||||
* @param mixed $fraction Fraction
|
||||
* Or can be an array of values
|
||||
*/
|
||||
public static function fractional(mixed $decimalDollar = null, mixed $fraction = 0): array|string|float
|
||||
{
|
||||
if (is_array($decimalDollar) || is_array($fraction)) {
|
||||
return self::evaluateArrayArguments([self::class, __FUNCTION__], $decimalDollar, $fraction);
|
||||
}
|
||||
|
||||
try {
|
||||
$decimalDollar = FinancialValidations::validateFloat(
|
||||
Functions::flattenSingleValue($decimalDollar) ?? 0.0
|
||||
);
|
||||
$fraction = FinancialValidations::validateInt(Functions::flattenSingleValue($fraction));
|
||||
} catch (Exception $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
// Additional parameter validations
|
||||
if ($fraction < 0) {
|
||||
return ExcelError::NAN();
|
||||
}
|
||||
if ($fraction == 0) {
|
||||
return ExcelError::DIV0();
|
||||
}
|
||||
|
||||
$dollars = ($decimalDollar < 0.0) ? ceil($decimalDollar) : floor($decimalDollar);
|
||||
$cents = fmod($decimalDollar, 1);
|
||||
$cents *= $fraction;
|
||||
$cents *= 10 ** (-ceil(log10($fraction)));
|
||||
|
||||
return $dollars + $cents;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue