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

Reply via email to