On Nov 3, 2014 7:13 PM, "Juan Basso" <jrba...@gmail.com> wrote: > > 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
Despite some tangential disagreements regarding the default behavior, there does appear to be a general consensus with regard to the optional argument. Could you please post an RFC for this if you haven't already? Thanks! --Kris