Bug #46145 [Opn]: printf() %e format should make 2 digit exponent

From: Date: Fri, 18 Oct 2019 12:04:09 +0000
Subject: Bug #46145 [Opn]: printf() %e format should make 2 digit exponent
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-223251@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=46145&edit=1 ID: 46145 Updated by: girgias@php.net Reported by: lbayuk at users dot sourceforge dot net Summary: printf() %e format should make 2 digit exponent Status: Open Type: Bug Package: Strings related Operating System: Linux PHP Version: 5.2.6 Block user comment: N Private report: N New Comment: Seems this behaviour is the same since at least PHP 4.3: https://3v4l.org/IYt8e Previous Comments: ------------------------------------------------------------------------ [2015-06-22 21:52:57] lbayuk at users dot sourceforge dot net (Verified still there in PHP-5.6.10 and fix email) ------------------------------------------------------------------------ [2008-09-29 01:07:30] lbayuk at pobox dot com After taking a look at your patch, approximately: /* * Make sure the exponent has at least 2 digits */ + if (t_len <= 1) { + *s++ = '0'; + } while (t_len--) { I got curious, since the code you added is described by the existing comment. So I checked back through CVS and sure enough similar code was there a while ago and was removed. It was: if (t_len == 1) *s++ = '0'; So it looks like the 2-digit minimum exponent code was *removed*. Certainly we would not want to put the code back in until we determine why it came out... perhaps there was a good reason. I haven't yet located the exact file version where the change was made. ------------------------------------------------------------------------ [2008-09-28 23:07:03] ilia dot cheishvili at gmail dot com The patch to fix this is here, along with all of the unit tests that had to be modified to take the new, correct behavior into account: http://pastebin.com/f641cf6fd ------------------------------------------------------------------------ [2008-09-21 19:44:25] lbayuk at users dot sourceforge dot net Description: ------------ PHP printf, sprintf, and fprintf with %e scientific notation produce a 1 digit exponent for values less than 1e10. Other implementation of functions by the same name produce a minimum of 2 digits in the exponent, as the C standard requires. Although it can be argued that PHP is not bound by other standards, the following comment in main/snprintf.c function php_conv_fp() [line 545] leads one to believe this is a PHP bug: /* * Make sure the exponent has at least 2 digits */ Reproduce code: --------------- <?php printf("%8.2e\n", 1000000); Expected result: ---------------- 1.00e+06 Actual result: -------------- <space>1.00e+6 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=46145&edit=1

« previous php.bugs (#223251) next »