From 6b6073f68585415c050c8b6bf0b17efa10cd6cb7 Mon Sep 17 00:00:00 2001 From: Catalin Dan Date: Wed, 9 Mar 2016 16:43:58 +0200 Subject: [PATCH] [Form] Fix INT64 cast to float in IntegerType. --- .../DataTransformer/NumberToLocalizedStringTransformer.php | 6 +++++- .../NumberToLocalizedStringTransformerTest.php | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php index 7cc3d5c805..acb75f2ca1 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php @@ -122,7 +122,11 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface $value = str_replace(',', $decSep, $value); } - $result = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE, $position); + if (!strstr($value, $decSep) && PHP_INT_SIZE === 8) { + $result = $formatter->parse($value, \NumberFormatter::TYPE_INT64, $position); + } else { + $result = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE, $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 e829871ec3..ef9c9738cb 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php @@ -433,4 +433,11 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase $transformer->reverseTransform("12\xc2\xa0345,678foo"); } + + public function testReverseTransformBigint() + { + $transformer = new NumberToLocalizedStringTransformer(null, true); + + $this->assertEquals(401657096594165125, (int) $transformer->reverseTransform((string) 401657096594165125)); + } }