Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:85534 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 84187 invoked from network); 30 Mar 2015 00:08:25 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 30 Mar 2015 00:08:25 -0000 Authentication-Results: pb1.pair.com header.from=yohgaki@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=yohgaki@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.218.47 as permitted sender) X-PHP-List-Original-Sender: yohgaki@gmail.com X-Host-Fingerprint: 209.85.218.47 mail-oi0-f47.google.com Received: from [209.85.218.47] ([209.85.218.47:36002] helo=mail-oi0-f47.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 9A/20-16184-7F398155 for ; Sun, 29 Mar 2015 19:08:24 -0500 Received: by oicf142 with SMTP id f142so105256079oic.3 for ; Sun, 29 Mar 2015 17:08:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=3M91gW1qq3UL5X/QyV8gzijk6yFz4m3j5u5ckdziZA4=; b=WizeS3v5XQbZRVAr3fCLjJ3KFofSYVx3eZ+hjJKHvA8TNcV6tV3t9a3tsvzzXbBto/ yBGMpMwsembTskX5wPi0A+VHyIErvLC/4FjBA1iu/S4z8acHPY9geMQc4QeqQ78uQ8SL ozJ4guqMwBvtSEOjxGy+wboMrPebT9OXyfe3OewivejcA8+lx0DZEd4UUuRZ4mYWnIHd bp87oRoKzpp4JRsG8EulpsRL866/g0piQGdBTIZjhXMEyVRhfPldi+4SokR0sxKNl0kv UpC4Z3ttL5ltvSGPAvQLjzj1j+UGoj8T1xRiFw/ZIyUb60nMLr8uRF3iibmWArhnvAhw r+Ig== X-Received: by 10.60.173.241 with SMTP id bn17mr24888069oec.35.1427674100248; Sun, 29 Mar 2015 17:08:20 -0700 (PDT) MIME-Version: 1.0 Sender: yohgaki@gmail.com Received: by 10.202.58.2 with HTTP; Sun, 29 Mar 2015 17:07:40 -0700 (PDT) In-Reply-To: References: Date: Mon, 30 Mar 2015 09:07:40 +0900 X-Google-Sender-Auth: 52BFWFkdvSy33W8Ag6y0JwI1_U0 Message-ID: To: Jakub Zelenka Cc: PHP internals list Content-Type: multipart/alternative; boundary=089e0118409899b7bb05127647fe Subject: Re: [PHP-DEV] JSON float number as string From: yohgaki@ohgaki.net (Yasuo Ohgaki) --089e0118409899b7bb05127647fe Content-Type: text/plain; charset=UTF-8 Hi Jakub, On Mon, Mar 30, 2015 at 4:33 AM, Jakub Zelenka wrote: > I would like to add a new option to JSON for dealing with large floats. The > use case is mainly for decoder but can be used for encoder as well. > > JSON_FLOAT_AS_STRING > decode: all float values will be decoded as string > - It's often an issue for very large float values with many fractional > digits that are coming from platforms that support larger float > representation than double. In that case the conversion is lost and there > is no way how to get it back (see http://bugs.php.net/68456 [pls ignore my > initial dump comments when I didn't get the issue :)] and an example of the > lost precision here http://3v4l.org/80iCh ). Converting the value to > string > keep the precision and resolves the problem. > > encode: all float values will be encoded as string > - re-using the constant for encoder makes sense if PHP creates JSON for > platform that support lower float type (e.g. C float) and the precision > loss is not acceptable > > > I think that this is more a bugfix as the precision is lost without any way > how to get it back (except pre-processing json string with regular > expression). I would like to add it to 5.6.x if there are no objections? > Converting int/float to PHP native type is obvious bug. We must consider compatibility for released versions, so +1 for adding JSON_FLOAT_AS_STRING option. "int" should be fixed also. http://3v4l.org/95dHM So option may be JSON_SCALAR_AS_STRING or additional JSON_INT_AS_STRING. PHP7 should have string scalars by default. IMHO. Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net --089e0118409899b7bb05127647fe--