On 24/01/2013 13:29, Krupkina Lesya Olegovna wrote:
Hello!
I’m newcomer to Python and I’m on documentation reading stage and trying some
of examples.
I’m using Win7 x64 OS and Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC
v.1500 64 bit (AMD64)].
I try to understand how string format expression (%)works. Everything is almost
clear but except one case: using ofg(G) conversion type and # flag.
Let’s take a look at documentation here:
http://docs.python.org/release/2.7.3/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
Document declares for g(G) conversion type in case of using # flag (4th note):
“The precision determines the number of significant digits before and after the
decimal point and defaults to 6”.
I have noticed behavior that does not meet documentation declaration and looks
like a bug in case when using g(G) conversion type with # flag
with omitted precision and zero integer part of the decimal. Could
someone, please comment the case it is a bug or right use case result? If it is
correct, please explain why.
Steps to reproduce the case:
1.Start python interactive mode
2.Enter string with g(G) conversion type and using #flag like this: "%#g"%0.3 –
precision parameter is omitted and integer part of the decimal is zero.
3.Watch the output results
Actual result:
Python outputs decimal as declared as but with more significant digits than
default value of 6 - if integer part of the decimal is equal to zero.
"%#g"%0.3
'0.300000'
"%#G"%0.3
'0.300000'
"%#G"%0.004
'0.00400000'
Expected results:
As declared in documentation – there will be 6 significant digits before and
after decimal point by default.
Thanks,
Regards, Lesya.
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
My experience is that things that look odd at first sight are VERY
rarely bugs - especially in something as mature as Python 2.7.
Maybe the documentation could be slightly clearer, but I see it as
saying the following:
'#g' and '#G' both convert to exponential format (with some exceptions)
with a default precision of 6 *significant figures*. It is certainly
talking about significant figures, not decimal places. So your final
example may look odd, but it really is doing what it says - there are 6
s.f. shown, and it has not converted to exponential form because the
exponent would not be less than -4.
With significant digits before the decimal point, it appears to convert
to exponential form only if the number of them exceeds the precision.
Best
Barnaby
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor