PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / moneyphp / money / src / Converter.php
ameliabooking / vendor / moneyphp / money / src Last commit date
Calculator 2 years ago Currencies 2 years ago Exception 2 years ago Exchange 2 years ago Formatter 2 years ago PHPUnit 2 years ago Parser 2 years ago Calculator.php 6 years ago Converter.php 2 years ago Currencies.php 2 years ago Currency.php 2 years ago CurrencyPair.php 2 years ago Exception.php 6 years ago Exchange.php 2 years ago Money.php 2 years ago MoneyFactory.php 5 years ago MoneyFormatter.php 2 years ago MoneyParser.php 6 years ago Number.php 2 years ago
Converter.php
49 lines
1 <?php
2
3 namespace Money;
4
5 /**
6 * Provides a way to convert Money to Money in another Currency using an exchange rate.
7 *
8 * @author Frederik Bosch <f.bosch@genkgo.nl>
9 */
10 final class Converter
11 {
12 /**
13 * @var Currencies
14 */
15 private $currencies;
16
17 /**
18 * @var Exchange
19 */
20 private $exchange;
21
22 public function __construct(Currencies $currencies, Exchange $exchange)
23 {
24 $this->currencies = $currencies;
25 $this->exchange = $exchange;
26 }
27
28 /**
29 * @param int $roundingMode
30 *
31 * @return Money
32 */
33 public function convert(Money $money, Currency $counterCurrency, $roundingMode = Money::ROUND_HALF_UP)
34 {
35 $baseCurrency = $money->getCurrency();
36 $ratio = $this->exchange->quote($baseCurrency, $counterCurrency)->getConversionRatio();
37
38 $baseCurrencySubunit = $this->currencies->subunitFor($baseCurrency);
39 $counterCurrencySubunit = $this->currencies->subunitFor($counterCurrency);
40 $subunitDifference = $baseCurrencySubunit - $counterCurrencySubunit;
41
42 $ratio = (string) Number::fromFloat($ratio)->base10($subunitDifference);
43
44 $counterValue = $money->multiply($ratio, $roundingMode);
45
46 return new Money($counterValue->getAmount(), $counterCurrency);
47 }
48 }
49