Mark Summerfield wrote:
> Hi,
>
> I'm using Python 30a.
>
> The docs for str.format()'s 'g' format say
> "General format. This prints the number as a fixed-point number,
> unless the number is too large, in which case it switches to 'e'
> exponent notation."
> The fixed-point format uses the 'f' character.
>
> But this does not seem to happen in practice:
>
>>>> "[{0:12.4e}] [{0:12.4f}] [{0:12.4g}]".format(10**4 * math.pi)
> '[ 3.1416e+04] [ 31415.9265] [ 3.142e+04]'
>>>> "[{0:12.4e}] [{0:12.4f}] [{0:12.4g}]".format(10**3 * math.pi)
> '[ 3.1416e+03] [ 3141.5927] [ 3142]'
>
> I thought this was a bug in Python 3, but Python 2 does the same thing:
>
>>>> n = 10**4 * math.pi
>>>> m = 10**3 * math.pi
>>>> "[%12.4e] [%12.4f] [%12.4g]" % (n, n, n)
> '[ 3.1416e+04] [ 31415.9265] [ 3.142e+04]'
>>>> "[%12.4e] [%12.4f] [%12.4g]" % (m, m, m)
> '[ 3.1416e+03] [ 3141.5927] [ 3142]'
They're the same because I copied the '%' code when I created the
__format__ code. I copied, instead of refactoring and using the same
code, because at the time I did it I thought the direction was going to
be to remove '%' formatting. Plus, the string/unicode work was making
it more complex at the time. If I had it to do over, I might spend some
more time refactoring, or maybe even modifying '%' to call str.format()
internally.
As to whether the documentation or the code is correct, I can't say
which is correct or more desirable. Changing how this works would no
doubt break all sorts of code.
> Python 2's docs are different from Python 3's regarding 'g' format:
> "Floating point format. Uses exponential format if exponent is
> greater than -4 or less than precision, decimal format otherwise."
> There is no "decimal format", but there is "Signed integer decimal"
> format which is what seems to being used.
>
> So is this a doc bug?
>
> BTW I notice that decimal.Decimal() numbers can't be used with the 'e',
> 'f', or 'g' formats. I know that these numbers aren't floating-point
> under the hood, but this still seems a bit counter-intuitive to me.
>
_______________________________________________
Python-3000 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe:
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com