money = static::create($amount); } /** * Return the amount of currency in smallest denomination * @return string */ public function getAmount() { return $this->money->getAmount(); } /** * Alias of getAmount() */ public function toAmount() { return $this->getAmount(); } /** * Returns the value in whole amounts, e.g: 100.00 * instead of returning in the smallest denomination * @return float */ public function getValue() { return $this->money->getValue(); } /** * Alias of getValue() */ public function toValue() { return $this->getValue(); } /** * @return MoneyBase */ public function getInstance() { return $this->money; } /** * @return int */ public function getPrecision() { return $this->money->getCurrency()->getPrecision(); } /** * * @return string */ public function __toString() { return $this->money->format(); } /** * Add an amount * @param $amount * @return Money * @throws \UnexpectedValueException * @throws \InvalidArgumentException */ public function add($amount) { if (!($amount instanceof self)) { $amount = static::createFromAmount($amount); } $this->money = $this->money->add($amount->money); return $this; } /** * @param $percent * @return $this * @throws \OutOfBoundsException * @throws \InvalidArgumentException */ public function addPercent($percent) { if (!is_numeric($percent)) { $percent = (float) $percent; } $amount = $this->money->multiply($percent / 100); $this->money = $this->money->add($amount); return $this; } /** * Subtract an amount * @param $amount * @return Money * @throws \UnexpectedValueException * @throws \InvalidArgumentException */ public function subtract($amount) { if (!($amount instanceof self)) { $amount = static::createFromAmount($amount); } $this->money = $this->money->subtract($amount->money); return $this; } /** * Multiply by an amount * @param $amount * @return Money * @throws \UnexpectedValueException * @throws \OutOfBoundsException * @throws \InvalidArgumentException */ public function multiply($amount) { if (!($amount instanceof self)) { $amount = static::createFromAmount($amount); } $this->money = $this->money->multiply($amount->money); return $this; } /** * Divide by an amount * @param $amount * @return Money * @throws \OutOfBoundsException * @throws \InvalidArgumentException */ public function divide($amount) { $this->money = $this->money->divide($amount, PHP_ROUND_HALF_EVEN); return $this; } /** * @param $money * @return bool * @throws \UnexpectedValueException * @throws \InvalidArgumentException */ public function equals($money) { if ($money instanceof self) { return $this->money->equals($money->money); } if ($money instanceof MoneyBase) { return $this->money->equals($money); } $money = static::convertToSubunit($money); return $this->money->equals(static::create($money)); } }