|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[1999-11-12 11:31 UTC] joey at cvs dot php dot net
[2001-02-10 12:55 UTC] jimw@php.net
[2001-07-22 12:28 UTC] andy@php.net
[2002-06-15 09:20 UTC] derick@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 16:00:02 2025 UTC |
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) {