28 $this->currencies = $currencies;
29 $this->exchange = $exchange;
39 public function convert(
Money $money,
Currency $counterCurrency, $roundingMode = Money::ROUND_HALF_UP)
42 $ratio = $this->exchange->quote($baseCurrency, $counterCurrency)->getConversionRatio();
44 $baseCurrencySubunit = $this->currencies->subunitFor($baseCurrency);
45 $counterCurrencySubunit = $this->currencies->subunitFor($counterCurrency);
46 $subunitDifference = $baseCurrencySubunit - $counterCurrencySubunit;
48 $ratio = (string) Number::fromFloat($ratio)->base10($subunitDifference);
50 $counterValue = $money->
multiply($ratio, $roundingMode);
52 return new Money($counterValue->getAmount(), $counterCurrency);