diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php index acb75f2ca1..a18eb957b5 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php @@ -122,12 +122,16 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface $value = str_replace(',', $decSep, $value); } - if (!strstr($value, $decSep) && PHP_INT_SIZE === 8) { - $result = $formatter->parse($value, \NumberFormatter::TYPE_INT64, $position); + if (false !== strpos($value, $decSep)) { + $type = \NumberFormatter::TYPE_DOUBLE; } else { - $result = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE, $position); + $type = PHP_INT_SIZE === 8 + ? \NumberFormatter::TYPE_INT64 + : \NumberFormatter::TYPE_INT32; } + $result = $formatter->parse($value, $type, $position); + if (intl_is_failure($formatter->getErrorCode())) { throw new TransformationFailedException($formatter->getErrorMessage()); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php index ef9c9738cb..87cdf964c8 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php @@ -438,6 +438,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase { $transformer = new NumberToLocalizedStringTransformer(null, true); - $this->assertEquals(401657096594165125, (int) $transformer->reverseTransform((string) 401657096594165125)); + $this->assertEquals(PHP_INT_MAX - 1, (int) $transformer->reverseTransform((string) (PHP_INT_MAX - 1))); } }