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

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

« previous php.bugs (#10495) next »