![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mets-rebuild.corals.io/wp-content/plugins/give/src/ValueObjects/ |
<?php namespace Give\ValueObjects; /** * Class Money * * @since 2.9.0 * @since 2.11.0 Refactored to make the minor amount the base. * @deprecated @since 2.20.0 Use Give\Framework\Support\ValueObjects\Money in framework instead * */ final class Money { /** * The amount in smallest unit of currency. * @var int */ protected $minorAmount; /** * @var array */ protected $currencyData; /** * Money constructor. * * @param int $minorAmount * @param array $currencyData */ public function __construct($minorAmount, $currencyData) { $this->minorAmount = $minorAmount; $this->currencyData = $currencyData; } /** * Get amount in smallest unit of currency. * * @sicne 2.9.0 * @since 2.11.0 Round minor amount to account for floating point precision. * * @return int */ public function getMinorAmount() { return $this->minorAmount; } /** * Get amount in smallest unit of currency. * * @sicne 2.9.0 * * @return string */ public function getAmount() { if ($this->currencyData['setting']['number_decimals']) { return $this->minorAmount / (10 ** $this->currencyData['setting']['number_decimals']); } return $this->minorAmount; } // Static Methods and Factories /** * @since 2.9.0 * @since 2.11.0 Converts the amount to a minor amount when creating an instance. * * @param int|string $amount Amount value without currency formatting * @param string $currency * * @return Money */ public static function of($amount, $currency) { $currencyData = self::getCurrencyData($currency); /** * When working with float values, be careful when casting to an integer. * Due to "floating point precision", the output may not match the expected value. * * @link https://www.php.net/manual/en/language.types.float.php * This can lead to confusing results: * for example, floor((0.1+0.7)*10) will usually return 7 instead of the expected 8, * since the internal representation will be something like 7.9999999999999991118.... */ $amount = absint( round($amount * (10 ** $currencyData['setting']['number_decimals'])) ); return new static($amount, $currencyData); } /** * @since 2.9.0 * * @param int|string $minorAmount * @param string $currency * * @return Money */ public static function ofMinor($minorAmount, $currency) { return new static($minorAmount, self::getCurrencyData($currency)); } /** * Retrieves the currency data for a given currency with some optimizations to avoid loading all the currencies more * than once. * * @since 2.9.0 * * @param $currency * * @return array */ private static function getCurrencyData($currency) { static $currenciesData = null; if ($currenciesData === null) { $currenciesData = give_get_currencies('all'); } return $currenciesData[$currency]; } }