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

Reply via email to