/** * @param money $amount * @return money */ public function add(Money $amount) { if (!$this->currency->equals($amount->getCurrency())) { throw new \InvalidArgumentException('Currency mismatch'); } return new Money($this->currency, $this->amount + $amount->getValue()); }
public function testValueCanBeReturned() { $amount = 123; $money = new Money(new USD(), $amount); $this->assertEquals($amount, $money->getValue()); }
/** * @param Money $another * * @return bool */ public function greaterThan(Money $another) { return bccomp($this->getValue(), $another->getValue(), self::PRECISION) > 0; }
/** * @param float $grossValue * @return Price */ public function addGross($grossValue) { $gross = new Money($grossValue); $newGross = $this->getGross() + $gross->getValue(); return new Price($this->getTax()->calculateNett($newGross), $newGross, $this->getCurrencySymbol(), $this->tax->getValue()); }
/** * @param Money $money * @return bool */ public function isGreaterThan(Money $money) { //floating point calculations precision problem here return round($this->getValue(), 6) > round($money->getValue(), 6); }
/** * compare * * Compares two instances for equality. Returns a value suitable for a sort * callback. i.e. 1 if $first is larger than $second, 0 if equal, and -1 if * $first is smaller than $second. * * @param Money $first * @param Money $second * @return int -1, 0, or 1 */ public function compare(Money $first, Money $second) { $secondValue = $first->getCurrency()->getCode() === $second->getCurrency()->getCode() ? $second->getValue() : $this->converter->convert($second, $first->getCurrency())->getValue(); return bccomp($first->getValue(), $secondValue, max([$first->getPrecision(), $second->getPrecision()])); }
/** * normalizeMoneyValue * * Returns the value of $second in terms of $first's currency. * * @param Money $first * @param Money $second * @return string */ private function normalizeMoneyValue(Money $first, Money $second) { return $first->getCurrency()->getCode() === $second->getCurrency()->getCode() ? $second->getValue() : $this->converter->convert($second, $first->getCurrency())->getValue(); }