[Python-Dev] format specification mini-language docs...

Eric Smith eric at trueblade.com
Sat Nov 22 03:03:43 CET 2008


Dino Viehland wrote:
> Ok, now I'm implementing __format__ support for IronPython.  The format spec mini-language docs say that a presentation type of None is the same as 'g' for floating point / decimal values.  

Awesome! Thanks for doing this.

 >But these two formats seem to differ based upon how they handle whole 
numbers:
>>>> 2.0.__format__('')
> '2.0'
>>>> 2.0.__format__('g')
> '2'

I think the docs are wrong. For floats, the PEP 
(http://www.python.org/dev/peps/pep-3101/) says:

'' (None) - similar to 'g', except that it prints at least one digit 
after the decimal point.

> The docs also say that 'g' prints it as fixed point unless the number is too large.  But the fixed point format differs from what 'f' would print.  I guess it didn't say they'd both print it as fixed point w/ a precision of 6 or anything but it seems a little unclear.
> 
>>>> 2.0.__format__('g')
> '2'
>>>> 2.0.__format__('f')
> '2.000000'

This is to be compatible with %-formatting:
$ ./python
Python 2.7a0 (trunk:67325, Nov 21 2008, 20:35:33)
[GCC 4.1.2 20070626 (Red Hat 4.1.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
 >>> '%f %g' % (2.0, 2.0)
'2.000000 2'

> Finally providing any sign character seems to cause +1.0#INF and friends to be returned instead of inf as is documented:
> 
>>>> 10e667.__format__('+')
> '+1.0#INF'
>>>> 10e667.__format__('')
> 'inf'

Yes, that does seem odd. Let me look at it a bit and I'll comment on it, 
hopefully this weekend. I have a pending fix for 2.7/3.1 to make inf 
handling more consistent across platforms, it might take care of this 
case, too.

> Are these just doc bugs?  The inf issue is the only one that seems particularly weird to me.

Agreed.

Eric.


More information about the Python-Dev mailing list