Dave Angel davea at
Sat Oct 17 16:02:27 CEST 2009

mattia wrote:
> Il Fri, 16 Oct 2009 21:04:08 +0000, mattia ha scritto:
>> Is there a way to print to an unbuffered output (like stdout)? I've seen
>> that something like sys.stdout.write("hello") works but it also prints
>> the number of characters!
> Another question (always py3). How can I print only the first number 
> after the comma of a division?
> e.g. print(8/3) --> 2.66666666667
> I just want 2.6 (or 2.66)
> Thanks, Mattia
Just as sys.stdout.write() is preferable to print() for your previous 
question, understanding str.format() is important to having good control 
over what your output looks like.  It's certainly not the only way, but 
the docs seem to say it's the preferred way in version 3.x    It was 
introduced in 2.6, so there are other approaches you might want if you 
need to work in 2.5 or earlier.

x = 8/3
s = "The answer is approx. {3:07.2f} after rounding".format(dummy0, 
dummy1, dummy2, x)

will print out the following:

The answer is approx. 0002.67 after rounding

A brief explanation of the format string {3:07.2f}  is as follows:
    3 selects argument 3 of the function, which is x
    0 means to zero-fill the value after conversion
    7 means 7 characters total width  (this helps determine who many 
zeroes are inserted)
    2 means 2 digits after the decimal
    f  means fixed point format

You can generally leave out the parts you don't need, but this gives you 
lots of control over what things should look like.  There are lots of 
other parts,  but this is most of what you might need for controlled 
printing of floats.

The only difference from what you asked is that this rounds, where you 
seemed (!) to be asking for truncation of the extra columns.  If you 
really need to truncate, I'd recommend using str() to get a string, then 
use index() to locate the decimal separator, and then slice it yourself.


More information about the Python-list mailing list