[Form] Fix NumberToLocalizedStringTransformer::reverseTransform with big integers

This commit is contained in:
Nicolas Grekas 2016-03-15 16:33:36 +01:00
parent 6b6073f685
commit 03c008cdbf
2 changed files with 8 additions and 4 deletions

View File

@ -122,12 +122,16 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface
$value = str_replace(',', $decSep, $value); $value = str_replace(',', $decSep, $value);
} }
if (!strstr($value, $decSep) && PHP_INT_SIZE === 8) { if (false !== strpos($value, $decSep)) {
$result = $formatter->parse($value, \NumberFormatter::TYPE_INT64, $position); $type = \NumberFormatter::TYPE_DOUBLE;
} else { } 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())) { if (intl_is_failure($formatter->getErrorCode())) {
throw new TransformationFailedException($formatter->getErrorMessage()); throw new TransformationFailedException($formatter->getErrorMessage());
} }

View File

@ -438,6 +438,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
{ {
$transformer = new NumberToLocalizedStringTransformer(null, true); $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)));
} }
} }