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