Viewing file: IntlLocalizedDecimalFormatter.php (1.6 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Money\Formatter;
use Money\Currencies; use Money\Money; use Money\MoneyFormatter;
/** * Formats a Money object using intl extension. * * @author Frederik Bosch <f.bosch@genkgo.nl> */ final class IntlLocalizedDecimalFormatter implements MoneyFormatter { /** * @var \NumberFormatter */ private $formatter;
/** * @var Currencies */ private $currencies;
/** * @param \NumberFormatter $formatter * @param Currencies $currencies */ public function __construct(\NumberFormatter $formatter, Currencies $currencies) { $this->formatter = $formatter; $this->currencies = $currencies; }
/** * {@inheritdoc} */ public function format(Money $money) { $valueBase = $money->getAmount(); $negative = false;
if ($valueBase[0] === '-') { $negative = true; $valueBase = substr($valueBase, 1); }
$subunit = $this->currencies->subunitFor($money->getCurrency()); $valueLength = strlen($valueBase);
if ($valueLength > $subunit) { $formatted = substr($valueBase, 0, $valueLength - $subunit); $decimalDigits = substr($valueBase, $valueLength - $subunit);
if (strlen($decimalDigits) > 0) { $formatted .= '.'.$decimalDigits; } } else { $formatted = '0.'.str_pad('', $subunit - $valueLength, '0').$valueBase; }
if ($negative === true) { $formatted = '-'.$formatted; }
return $this->formatter->format($formatted); } }
|