diff --git a/library/Zend/I18n/View/Helper/CurrencyFormat.php b/library/Zend/I18n/View/Helper/CurrencyFormat.php index b43f08e0600..ee7347db9f5 100644 --- a/library/Zend/I18n/View/Helper/CurrencyFormat.php +++ b/library/Zend/I18n/View/Helper/CurrencyFormat.php @@ -90,13 +90,33 @@ public function __invoke( if (null === $currencyCode) { $currencyCode = $this->getCurrencyCode(); } - if (null !== $showDecimals) { - $this->setShouldShowDecimals($showDecimals); + if (null === $showDecimals) { + $showDecimals = $this->shouldShowDecimals(); } if (null === $pattern) { $pattern = $this->getCurrencyPattern(); } + return $this->formatCurrency($number, $currencyCode, $showDecimals, $locale, $pattern); + } + + /** + * Format a number + * + * @param float $number + * @param string $currencyCode + * @param bool $showDecimals + * @param string $locale + * @param string $pattern + * @return string + */ + protected function formatCurrency( + $number, + $currencyCode, + $showDecimals, + $locale, + $pattern + ) { $formatterId = md5($locale); if (!isset($this->formatters[$formatterId])) { @@ -110,7 +130,7 @@ public function __invoke( $this->formatters[$formatterId]->setPattern($pattern); } - if ($this->shouldShowDecimals()) { + if ($showDecimals) { $this->formatters[$formatterId]->setAttribute(NumberFormatter::FRACTION_DIGITS, 2); } else { $this->formatters[$formatterId]->setAttribute(NumberFormatter::FRACTION_DIGITS, 0); diff --git a/tests/ZendTest/I18n/View/Helper/CurrencyFormatTest.php b/tests/ZendTest/I18n/View/Helper/CurrencyFormatTest.php index d7a6a543297..b7a4b3a5e1f 100644 --- a/tests/ZendTest/I18n/View/Helper/CurrencyFormatTest.php +++ b/tests/ZendTest/I18n/View/Helper/CurrencyFormatTest.php @@ -103,6 +103,16 @@ public function testSettersProvideDefaults( $this->assertMbStringEquals($expected, $this->helper->__invoke($number)); } + public function testViewhelperExecutedSequentially() + { + $helper = $this->helper; + $helper->setShouldShowDecimals(true); + + $this->assertEquals('1.234,43 €', $helper(1234.4321, 'EUR', null, 'de_DE')); + $this->assertEquals('1.234 €', $helper(1234.4321, 'EUR', false, 'de_DE')); + $this->assertEquals('1.234,43 €', $helper(1234.4321, 'EUR', null, 'de_DE')); + } + public function testDefaultLocale() { $this->assertMbStringEquals(Locale::getDefault(), $this->helper->getLocale());