lockfile again
This commit is contained in:
48
vendor/moneyphp/money/src/Converter.php
vendored
Normal file
48
vendor/moneyphp/money/src/Converter.php
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace Money;
|
||||
|
||||
/**
|
||||
* Provides a way to convert Money to Money in another Currency using an exchange rate.
|
||||
*
|
||||
* @author Frederik Bosch <f.bosch@genkgo.nl>
|
||||
*/
|
||||
final class Converter
|
||||
{
|
||||
/**
|
||||
* @var Currencies
|
||||
*/
|
||||
private $currencies;
|
||||
|
||||
/**
|
||||
* @var Exchange
|
||||
*/
|
||||
private $exchange;
|
||||
|
||||
public function __construct(Currencies $currencies, Exchange $exchange)
|
||||
{
|
||||
$this->currencies = $currencies;
|
||||
$this->exchange = $exchange;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $roundingMode
|
||||
*
|
||||
* @return Money
|
||||
*/
|
||||
public function convert(Money $money, Currency $counterCurrency, $roundingMode = Money::ROUND_HALF_UP)
|
||||
{
|
||||
$baseCurrency = $money->getCurrency();
|
||||
$ratio = $this->exchange->quote($baseCurrency, $counterCurrency)->getConversionRatio();
|
||||
|
||||
$baseCurrencySubunit = $this->currencies->subunitFor($baseCurrency);
|
||||
$counterCurrencySubunit = $this->currencies->subunitFor($counterCurrency);
|
||||
$subunitDifference = $baseCurrencySubunit - $counterCurrencySubunit;
|
||||
|
||||
$ratio = (string) Number::fromFloat($ratio)->base10($subunitDifference);
|
||||
|
||||
$counterValue = $money->multiply($ratio, $roundingMode);
|
||||
|
||||
return new Money($counterValue->getAmount(), $counterCurrency);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user