Open Monograph Press  3.3.0
Converter.php
1 <?php
2 
3 namespace Money;
4 
10 final class Converter
11 {
15  private $currencies;
16 
20  private $exchange;
21 
26  public function __construct(Currencies $currencies, Exchange $exchange)
27  {
28  $this->currencies = $currencies;
29  $this->exchange = $exchange;
30  }
31 
39  public function convert(Money $money, Currency $counterCurrency, $roundingMode = Money::ROUND_HALF_UP)
40  {
41  $baseCurrency = $money->getCurrency();
42  $ratio = $this->exchange->quote($baseCurrency, $counterCurrency)->getConversionRatio();
43 
44  $baseCurrencySubunit = $this->currencies->subunitFor($baseCurrency);
45  $counterCurrencySubunit = $this->currencies->subunitFor($counterCurrency);
46  $subunitDifference = $baseCurrencySubunit - $counterCurrencySubunit;
47 
48  $ratio = (string) Number::fromFloat($ratio)->base10($subunitDifference);
49 
50  $counterValue = $money->multiply($ratio, $roundingMode);
51 
52  return new Money($counterValue->getAmount(), $counterCurrency);
53  }
54 }
Money
Money\Exchange
Definition: Exchange.php:12
Money\Converter
Definition: Converter.php:10
Money\Currency
Definition: vendor/moneyphp/money/src/Currency.php:14
Money\Converter\__construct
__construct(Currencies $currencies, Exchange $exchange)
Definition: Converter.php:32
Money\Money\multiply
multiply($multiplier, $roundingMode=self::ROUND_HALF_UP)
Definition: Money.php:318
Money\Currencies
Definition: Currencies.php:12
Money\Converter\convert
convert(Money $money, Currency $counterCurrency, $roundingMode=Money::ROUND_HALF_UP)
Definition: Converter.php:45
Money\Money\getCurrency
getCurrency()
Definition: Money.php:216