On Mon, May 30, 2016 at 6:34 PM, Jakub Zelenka <bu...@php.net> wrote:
> On Fri, Sep 4, 2015 at 1:41 AM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote: > > > Hi all, > > > > IEEE 754 double cannot express exact float values. That said, > > float values expressed by json/serialize/var_export/echo/print > > are not precise enough in many cases. > > > > Issues: > > - json_encode() uses EG(precision)=14 that truncates float values. > > echo()/print() > > does this as well. > > - large EG(precision)/PG(serialize_precision) prints meaningless values. > > > > This RFC proposes zend_dtoa()'s 0 mode support which rounds float value > > to nearest value. > > > > https://wiki.php.net/rfc/precise_float_value > > https://github.com/php/php-src/pull/1455 > > > > This change is simple enough for PHP 7.0. IMO. > > Comments/suggestions are appreciated! > > > > > Hi, > > After asking Yasuo, I'm putting forward this RFC to have more precise float > to string decoding at least in PHP 7.1. I cleaned the RFC up a little bit > and it's targeting just 7.1. > > It has been some time since this was announced so I will keep it open for a > week or two and then plan to start vote. > Thanks for taking over this proposal! I've already mentioned this on the PR when this was originally proposed, but bringing it up here as well: This proposal adds a new json.precision setting. Why? I've been told that this is more flexible, which is fair enough, but imho we should have very strong reasons for introducing new ini settings. Reasons that go beyond "it might be useful to someone ... maybe?" So what's the particular use-case here? Where is it necessary to export inaccurate floating point numbers in JSON? And should such a use-case indeed exist, why is this a global setting rather than an option of json_encode? Furthermore, note that even without this new ini option, you always have the option of temporarily changing serialize_precision for a json_encode call, if you *really* need it. Please also take a look at this comment on the implementation: https://github.com/php/php-src/pull/1455#discussion_r53933480 Regards, Nikita