Bug #1029: printf (& sprintf) dosn't handle exponential format for floats correctly
| From: | leif dot thuresson at tsl dot uu dot se | Date: | Tue, 05 Jan 1999 11:30:15 +0000 |
| Subject: | Bug #1029: printf (& sprintf) dosn't handle exponential format for floats correctly | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-3276@lists.php.net to get a copy of this message | ||
From: leif.thuresson@tsl.uu.se
Operating system: Linux
PHP version: 3.0.6
PHP Bug Type: Misbehaving function
Bug description: printf (& sprintf) dosn't handle exponential format for floats correctly
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) {
--
PHP Development Mailing List http://www.php.net/
To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net
For help: php-dev-help@lists.php.net