[PHP-DEV] Bug #1029 Updated: printf (& sprintf) dosn't handle exponential format for floats correctly From: andy <email protected>
Date: 07/22/01

ID: 1029
Updated by: andy
Reported By: leif.thuresson <email protected>
Status: Open
Bug Type: Feature/Change Request
Operating System: Linux
PHP Version: 4.0
New Comment:

Should this request be closed? It's really old...

Previous Comments:
------------------------------------------------------------------------

[2001-02-10 12:55:06] jimw <email protected>

really reassigned to 4.0 this time.

------------------------------------------------------------------------

[1999-11-12 11:31:07] joey <email protected>

Moving to feature req.

------------------------------------------------------------------------

[1999-01-05 06:29:54] leif.thuresson <email protected>

System: Linux, Apache with PHP-module
Problem: printf (& sprintf) dosn't handle exponential format for floats correctly

Comment: This isn't actually a bug since it isn't documented to work in the manual.
                I nedded exponential format in my application and since the function
                "formatted_print.c" already had some support for exp. format (but
                not working correctly) the simplest solution was to fix it in the php source code.
                Below is my patch to "formatted_print.c" if you would like to include it
                in a future rease of PHP.
                Thanks for a great tool for building web interfaces to databases !

                Regards,
                   -leif

*** formatted_print.c.org Mon Jan 4 21:06:38 1999
--- formatted_print.c Mon Jan 4 21:13:09 1999
***************
*** 257,263 ****
          } else if (precision > MAX_FLOAT_PRECISION) {
                  precision = MAX_FLOAT_PRECISION;
          }
! cvt = _php3_cvt(number, precision, &decpt, &sign, (fmt == 'e'));
  
          if (sign) {
                  numbuf[i++] = '-';
--- 257,266 ----
          } else if (precision > MAX_FLOAT_PRECISION) {
                  precision = MAX_FLOAT_PRECISION;
          }
! if (fmt == 'e')
! cvt = _php3_cvt(number, precision+1, &decpt, &sign, 1);
! else
! cvt = _php3_cvt(number, precision, &decpt, &sign, 0);
  
          if (sign) {
                  numbuf[i++] = '-';
***************
*** 288,294 ****
          while (cvt[j]) {
                  numbuf[i++] = cvt[j++];
          }
!
          numbuf[i] = '\0';
  
          if (precision > 0) {
--- 291,311 ----
          while (cvt[j]) {
                  numbuf[i++] = cvt[j++];
          }
! if (fmt == 'e') {
! int exponent = decpt-1;
! numbuf[i++] = 'e';
! if (exponent < 0)
! numbuf[i++] = '-';
! else
! numbuf[i++] = '+';
! exponent = abs(exponent);
! if (exponent > 99) {
! numbuf[i++] = '0' + exponent / 100;
! exponent = exponent % 100;
! }
! numbuf[i++] = '0' + exponent / 10;
! numbuf[i++] = '0' + exponent % 10;
! }
          numbuf[i] = '\0';
  
          if (precision > 0) {

------------------------------------------------------------------------

Edit this bug report at http://bugs.php.net/?id=1029&edit=1

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: php-dev-unsubscribe <email protected>
For additional commands, e-mail: php-dev-help <email protected>
To contact the list administrators, e-mail: php-list-admin <email protected>