diff --git a/framework/i18n/Formatter.php b/framework/i18n/Formatter.php index 40e9c50422..14d97ceff0 100644 --- a/framework/i18n/Formatter.php +++ b/framework/i18n/Formatter.php @@ -727,6 +727,7 @@ class Formatter extends Component $value = $this->normalizeNumericValue($value); if ($this->_intlLoaded) { $f = $this->createNumberFormatter(NumberFormatter::DECIMAL, null, $options, $textOptions); + $f->setAttribute(NumberFormatter::FRACTION_DIGITS, 0); return $f->format($value, NumberFormatter::TYPE_INT64); } else { return number_format((int) $value, 0, $this->decimalSeparator, $this->thousandSeparator); diff --git a/tests/unit/framework/i18n/FormatterTest.php b/tests/unit/framework/i18n/FormatterTest.php index 159f17ae15..3f38dfd53d 100644 --- a/tests/unit/framework/i18n/FormatterTest.php +++ b/tests/unit/framework/i18n/FormatterTest.php @@ -2,7 +2,9 @@ namespace yiiunit\framework\i18n; +use NumberFormatter; use yii\i18n\Formatter; +use Yii; use yiiunit\TestCase; use DateTime; use DateInterval; @@ -575,9 +577,49 @@ class FormatterTest extends TestCase // number format - - public function testIntlAsInteger() + /** + * Provides some configuration that should not affect Integer formatter + */ + public function differentConfigProvider() { + // make this test not break when intl is not installed + if (!extension_loaded('intl')) { + return []; + } + + return [ + [[ + 'numberFormatterOptions' => [ + NumberFormatter::MIN_FRACTION_DIGITS => 2, + ], + ]], + [[ + 'numberFormatterOptions' => [ + NumberFormatter::MAX_FRACTION_DIGITS => 2, + ], + ]], + [[ + 'numberFormatterOptions' => [ + NumberFormatter::FRACTION_DIGITS => 2, + ], + ]], + [[ + 'numberFormatterOptions' => [ + NumberFormatter::MIN_FRACTION_DIGITS => 2, + NumberFormatter::MAX_FRACTION_DIGITS => 4, + ], + ]], + ]; + } + + + /** + * @dataProvider differentConfigProvider + */ + public function testIntlAsInteger($config) + { + // configure formatter with different configs that should not affect integer format + Yii::configure($this->formatter, $config); $this->testAsInteger(); }