Bug #1029 Updated: printf (& sprintf) dosn't handle exponential format for floats correctly
| From: | derick@php.net | Date: | Sat, 15 Jun 2002 13:20:52 +0000 |
| Subject: | Bug #1029 Updated: printf (& sprintf) dosn't handle exponential format for floats correctly | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-10495@lists.php.net to get a copy of this message | ||
ID: 1029
Updated by: derick@php.net
Reported By: leif.thuresson@tsl.uu.se
-Status: Assigned
+Status: Closed
Bug Type: Feature/Change Request
Operating System: Linux
PHP Version: 4.0
Assigned To: derick
New Comment:
I've no clue what this is about... printf seems to work just fine here
with exponentional numbers.
Derick
Previous Comments:
------------------------------------------------------------------------
[2001-07-22 12:28:38] andy@php.net
Should this request be closed? It's really old...
------------------------------------------------------------------------
[2001-02-10 12:55:06] jimw@php.net
really reassigned to 4.0 this time.
------------------------------------------------------------------------
[1999-11-12 11:31:07] joey@cvs.php.net
Moving to feature req.
------------------------------------------------------------------------
[1999-01-05 06:29:54] leif.thuresson@tsl.uu.se
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