Open Monograph Press  3.3.0
IntlMoneyFormatter.php
1 <?php
2 
3 namespace Money\Formatter;
4 
6 use Money\Money;
8 
14 final class IntlMoneyFormatter implements MoneyFormatter
15 {
19  private $formatter;
20 
24  private $currencies;
25 
30  public function __construct(\NumberFormatter $formatter, Currencies $currencies)
31  {
32  $this->formatter = $formatter;
33  $this->currencies = $currencies;
34  }
35 
39  public function format(Money $money)
40  {
41  $valueBase = $money->getAmount();
42  $negative = false;
43 
44  if ($valueBase[0] === '-') {
45  $negative = true;
46  $valueBase = substr($valueBase, 1);
47  }
48 
49  $subunit = $this->currencies->subunitFor($money->getCurrency());
50  $valueLength = strlen($valueBase);
51 
52  if ($valueLength > $subunit) {
53  $formatted = substr($valueBase, 0, $valueLength - $subunit);
54  $decimalDigits = substr($valueBase, $valueLength - $subunit);
55 
56  if (strlen($decimalDigits) > 0) {
57  $formatted .= '.'.$decimalDigits;
58  }
59  } else {
60  $formatted = '0.'.str_pad('', $subunit - $valueLength, '0').$valueBase;
61  }
62 
63  if ($negative === true) {
64  $formatted = '-'.$formatted;
65  }
66 
67  return $this->formatter->formatCurrency($formatted, $money->getCurrency()->getCode());
68  }
69 }
Money\Money
Definition: Money.php:16
Money\Formatter\IntlMoneyFormatter\__construct
__construct(\NumberFormatter $formatter, Currencies $currencies)
Definition: IntlMoneyFormatter.php:36
Money
Money\Currencies
Definition: AggregateCurrencies.php:3
Money\Formatter
Definition: AggregateMoneyFormatter.php:3
Money\Formatter\IntlMoneyFormatter\format
format(Money $money)
Definition: IntlMoneyFormatter.php:45
Money\MoneyFormatter
Definition: MoneyFormatter.php:10
Money\Currencies
Definition: Currencies.php:12
Money\Money\getCurrency
getCurrency()
Definition: Money.php:216
Money\Money\getAmount
getAmount()
Definition: Money.php:206
Money\Formatter\IntlMoneyFormatter
Definition: IntlMoneyFormatter.php:14