Bug #1029: printf (& sprintf) dosn't handle exponential format for floats correctly

From: 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

« previous php.dev (#3276) next »