Hi all, On Fri, Jul 31, 2015 at 4:44 PM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote:
> On Thu, Jul 30, 2015 at 6:06 PM, Nikita Popov <nikita....@gmail.com> > wrote: > >> On Thu, Jul 30, 2015 at 1:25 AM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote: >> >>> Hi all, >>> >>> On Thu, Jul 30, 2015 at 7:44 AM, Yasuo Ohgaki <yohg...@ohgaki.net> >>> wrote: >>> >>>> On Thu, Jul 30, 2015 at 1:13 AM, Nikita Popov <nikita....@gmail.com> >>>> wrote: >>>> >>>>> Instead of continuing to use serialize_precision, which will produce >>>>> unnecessarily long outputs for many values, why don't we just switch to >>>>> using the 0 mode of zend_dtoa, i.e. to return the shortest output that is >>>>> still accurate if interpreted in round-to-nearest. I think this is what >>>>> everybody else is using when they convert floating point numbers to >>>>> strings. I guess we may not be able to change normal floating point >>>>> printing to use this, but this seems like the best mode for anything using >>>>> serialize_precision now and everything that should be using it (like JSON, >>>>> and queries, etc). >>>> >>>> >>>> I prefer your proposal! >>>> Your proposal is a lot better than now. >>>> Anyone has opinion for this? >>>> >>>> I'm writing the RFC and I would like to make this the first option. i.e. >>>> serialize_precision=0 uses "zend_dtoa 0 mode" for all data exchange >>>> functions (json/serialize/var_exrport. Anyone care about WDDX/XML_RPC?) >>>> >>> >>> I wrote draft RFC. >>> >>> https://wiki.php.net/rfc/precise_float_value >>> >>> Please comment. I would like to start RFC discussion shortly. >>> Thank you. >>> >> >> Nice idea about using a special serialize_precision value for this. This >> allows to keep BC for those that have tests for particular serialize output >> or similar things. >> >> I would suggest to default serialize_precision to -1 in PHP 7 -- if >> people want the previous behavior they can still have it, but I think -1 is >> the more reasonable default as it matches what one would naturally expect. >> >> I don't see the need for having a separate setting for JSON. Having a >> dozen different float precision settings will not help anyone. >> > > Thank you for your feedback. > I agree it's better if PHP7 uses 0 mode by default. I'll update the RFC. > I have things to do on this weekend. I'll try to write patch this weekend > hopefully. > I sent work in progress PR for this and updated the RFC. https://github.com/php/php-src/pull/1455 TODO: Add/modify tests. Add 0 mode support for PG(precision). Add WDDX/XMLRPC PG(serialize_precision) support. https://wiki.php.net/rfc/precise_float_value Old behavior MacBook-Pro:github-php-src yohgaki$ php -r '$a=["v"=>123450000000000000000000000000.1234567890123]; var_dump(json_encode($a), serialize($a), var_export($a, true));'; string(16) "{"v":1.2345e+29}" string(39) "a:1:{s:1:"v";d:1.2344999999999999E+29;}" string(42) "array ( 'v' => 1.2344999999999999E+29, )" New behavior MacBook-Pro:github-php-src yohgaki$ ./php-bin -r '$a=["v"=>123450000000000000000000000000.1234567890123]; var_dump(json_encode($a), serialize($a), var_export($a, true));'; string(16) "{"v":1.2345e+29}" string(27) "a:1:{s:1:"v";d:1.2345E+29;}" string(30) "array ( 'v' => 1.2345E+29, )" Before I start working on PG(precision) 0 mode support, I would like to hear comments for this change if any. The default (PG(precision)=14) will not be changed and there will be no BC. I think it's more consistent if both PG(precision) and PG(serialize_precision) support 0 mode. Any comments for adding PG(precision) 0 mode support? Regards, -- Yasuo Ohgaki yohg...@ohgaki.net