Hi,

I opened a pull request[1] in order to solve the bug 50224[2] and it ended
creating this pull request to add a new flag called
JSON_PRESERVE_FRACTIONAL_PART on json_encode function. This flag will make
the json encode to output float number always with decimal part, even when
it is 0.

Currently if you try to convert 10.0 using json_encode it outputs 10. It
means if you decode it it will give an integer instead a float. In PHP
words, json_decode(json_encode(10.0)) !== 10.0.

After some researches and discussions it is not considered a bug because
JSON specs treat integer and floats as number. Looking how other languages
treat this encoding I could find it:
- C (using lib jansson) and Ruby the output contains the decimal portion;
- Python and Javascript outputs without the decimal portion.

So it is kind of common to have different behaviors since JSON specs define
it as just number. The idea of the new flag is allow PHP to behave the both
ways.

In the pull request Stanislav Malyshev suggested to merge it in the 5.6,
but just want to see if someone else has any objection. Ferenc Kovacs
and Jakub Zelenka also are in favor of merging on 5.6.
Jakub completed suggesting to have this option enabled by default on PHP 7.

Anyone has any objection on merging it on 5.6? Some comments about enabling
it by default in 7?

As a side note, with the pull request the encode of floats are about 20%
faster, even after the flag check. This improvement just affect float
encoding and has no impact on the other types.

[1] https://github.com/php/php-src/pull/642
[2] https://bugs.php.net/bug.php?id=50224


Thanks,
Juan Basso

Reply via email to