Hi Gwynne, ----- Original Message ----- From: "Gwynne" Sent: Saturday, July 22, 2006
> On Jul 20, 2006, at 3:21 PM, Marcus Boerger wrote: > >> I've wished there was a *printf() float specifier that wouldn't > >> include > >> trailing zeros/point, as simply converting to string (echo, %s, > >> etc.) can > >> result in scientific notation, which I *don't* want (%g in > >> convert_to_string()). The only other way that would result in > >> what I want > >> is number_format() with my "no-extra-zeros option" patch. ;-) So > >> I was > >> originally looking for how to NOT pad %f to the specified > >> precision, then I > >> thought why not add more of the stuff from C? (And I see it's > >> marked "not > >> done" in formatted_print.c.) > > > >> Can/should I go ahead and add support for the # flag/specifier, g/ > >> G, and E > >> (the missing compliment to e)? Make everything work like C, > >> except # used > >> with f/F, which would mean "remove trailing 0's/point" -- as C's > >> behavior > >> with # and f (add point even when precision=0?) can be done in > >> PHP. (I > >> assume C's is for when precision is specified with * + parameter?) > > Having more conversion specifiers here won't hurt. If it can be done > > in a way compatible to other languages especially like C it should be > > done in that way. If PHP has already closed the way by choosing > > opposite > > defaults the opposite should everntually also work. > > While we're on the subject, one of my favorite personal patches to > PHP is one that adds the %n specifier. The parameter to %n is a > reference which recieves the total length of the string with all > replacements so far. %n itself is replaced by nothing at all. You > could do this with $n = strlen( $s = sprintf( blah blah blah ) ) + > strlen( $s .= sprintf( the rest of the blah ) );, but it's a very > nice shortcut if you need the replaced length in the middle of the > conversion or for a situation like this (and the above doesn't work > too well if you have positional params!): > > printf( "Some processing message with %s replacements...%n", 'some', & > $n ); > // do some stuff here > print str_repeat( ' ', $n ) . "\rSome status text here that doesn't > worry about whether the replaced text was longer."; > > Here's the printf(3) manpage description for %n (MacOS X system, BSD > manpage): > > n The number of characters written so far is stored into > the inte- > ger indicated by the int * (or variant) pointer > argument. No > argument is converted. > > Any chance of getting this into PHP? I can provide a patch. > > -- Gwynne, Daughter of the Code > "This whole world is an asylum for the incurable." I had thought about adding %n too, but didn't know what the reaction would be or if it'd be used. (And the length thing would have to be changed [later] for Unicode length or such, I assume?) Also, wasn't sure about the internals code for the reference and writing to it, etc. :-) Sounds fine to me though, if your patch can be applied. If PHP gets these additions, it'll have all of C's except %p I guess. :-) Matt -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php