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."

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to