From 3be0d35b17cfb22914eef2541e43bf4e79ab2168 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Sat, 9 Feb 2019 11:37:37 +0100 Subject: [PATCH] forward valid numeric values to transform() --- .../MoneyToLocalizedStringTransformer.php | 8 +++++- .../NumberToLocalizedStringTransformer.php | 5 ++++ .../MoneyToLocalizedStringTransformerTest.php | 26 ++++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php index 7449fedfc69cc..b163cc093bfac 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php @@ -23,6 +23,12 @@ class MoneyToLocalizedStringTransformer extends NumberToLocalizedStringTransform { private $divisor; + /** + * @param int|null $scale + * @param bool|null $grouping + * @param int|null $roundingMode + * @param int|null $divisor + */ public function __construct($scale = 2, $grouping = true, $roundingMode = self::ROUND_HALF_UP, $divisor = 1) { if (null === $grouping) { @@ -58,7 +64,7 @@ public function transform($value) if (!is_numeric($value)) { throw new TransformationFailedException('Expected a numeric.'); } - $value = (string) ($value / $this->divisor); + $value /= $this->divisor; } return parent::transform($value); diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php index c6b278817c1fb..d720bb8e77f45 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php @@ -78,6 +78,11 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface private $scale; + /** + * @param int|null $scale + * @param bool|null $grouping + * @param int|null $roundingMode + */ public function __construct($scale = null, $grouping = false, $roundingMode = self::ROUND_HALF_UP) { if (null === $grouping) { diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php index d9fafdff13a35..c5bffe4d96e65 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformerTest.php @@ -17,6 +17,18 @@ class MoneyToLocalizedStringTransformerTest extends TestCase { + private $previousLocale; + + protected function setUp() + { + $this->previousLocale = setlocale(LC_ALL, '0'); + } + + protected function tearDown() + { + setlocale(LC_ALL, $this->previousLocale); + } + public function testTransform() { // Since we test against "de_AT", we need the full implementation @@ -73,7 +85,7 @@ public function testReverseTransformEmpty() $this->assertNull($transformer->reverseTransform('')); } - public function testFloatToIntConversionMismatchOnReversTransform() + public function testFloatToIntConversionMismatchOnReverseTransform() { $transformer = new MoneyToLocalizedStringTransformer(null, null, null, 100); IntlTestHelper::requireFullIntl($this, false); @@ -90,4 +102,16 @@ public function testFloatToIntConversionMismatchOnTransform() $this->assertSame('10,20', $transformer->transform(1020)); } + + public function testValidNumericValuesWithNonDotDecimalPointCharacter() + { + // calling setlocale() here is important as it changes the representation of floats when being cast to strings + setlocale(LC_ALL, 'de_AT.UTF-8'); + + $transformer = new MoneyToLocalizedStringTransformer(4, null, null, 100); + IntlTestHelper::requireFullIntl($this, false); + \Locale::setDefault('de_AT'); + + $this->assertSame('0,0035', $transformer->transform(12 / 34)); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy