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