Python, print all floats to 2 decimal places in output

Question:

I need to output 4 different floats to two decimal places.

This is what I have:

print '%.2f' % var1,'kg =','%.2f' % var2,'lb =','%.2f' % var3,'gal =','%.2f' % var4,'l'

Which is very unclean, and looks bad. Is there a way to make any float in that out put ‘%.2f’?

Note: Using Python 2.6.

Asked By: Omar

||

Answers:

Well I would atleast clean it up as follows:

print "%.2f kg = %.2f lb = %.2f gal = %.2f l" % (var1, var2, var3, var4)
Answered By: Frank Krueger

Not directly in the way you want to write that, no. One of the design tenets of Python is “Explicit is better than implicit” (see import this). This means that it’s better to describe what you want rather than having the output format depend on some global formatting setting or something. You could of course format your code differently to make it look nicer:

print         '%.2f' % var1, 
      'kg =' ,'%.2f' % var2, 
      'lb =' ,'%.2f' % var3, 
      'gal =','%.2f' % var4, 
      'l'
Answered By: Greg Hewgill

If you just want to convert the values to nice looking strings do the following:

twodecimals = ["%.2f" % v for v in vars]

Alternatively, you could also print out the units like you have in your question:

vars = [0, 1, 2, 3] # just some example values
units = ['kg', 'lb', 'gal', 'l']
delimiter = ', ' # or however you want the values separated

print delimiter.join(["%.2f %s" % (v,u) for v,u in zip(vars, units)])
Out[189]: '0.00 kg, 1.00 lb, 2.00 gal, 3.00 l'

The second way allows you to easily change the delimiter (tab, spaces, newlines, whatever) to suit your needs easily; the delimiter could also be a function argument instead of being hard-coded.

Edit: To use your ‘name = value’ syntax simply change the element-wise operation within the list comprehension:

print delimiter.join(["%s = %.2f" % (u,v) for v,u in zip(vars, units)])
Out[190]: 'kg = 0.00, lb = 1.00, gal = 2.00, l = 3.00'
Answered By: awesomo

If you are looking for readability, I believe that this is that code:

print '%(kg).2f kg = %(lb).2f lb = %(gal).2f gal = %(l).2f l' % {
    'kg': var1,
    'lb': var2,
    'gal': var3,
    'l': var4,
}
Answered By: Cacilhas

I have just discovered the round function – it is in Python 2.7, not sure about 2.6. It takes a float and the number of dps as arguments, so round(22.55555, 2) gives the result 22.56.

Answered By: Rioka

Format String Syntax.

https://docs.python.org/3/library/string.html#formatstrings

from math import pi
var1, var2, var3, var4 = pi, pi*2, pi*3, pi*4
'{:0.2f}, kg={:0.2f}, lb={:0.2f}, gal={:0.2f}'.format(var1, var2, var3, var4)

The output would be:

'3.14, kg=6.28, lb=9.42, gal=12.57'
Answered By: Chikipowpow

If what you want is to have the print operation automatically change floats to only show 2 decimal places, consider writing a function to replace ‘print’. For instance:

def fp(*args):  # fp means 'floating print'
    tmps = []
    for arg in args:
        if type(arg) is float: arg = round(arg, 2)  # transform only floats
        tmps.append(str(arg))
    print(" ".join(tmps)

Use fp() in place of print …

fp("PI is", 3.14159) … instead of … print "PI is", 3.14159

Answered By: Richard_M.

use f-strings:

>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'

or in your case:

print(f'{var1:.2f}, kg = {var1:.2f}, lb = {var2:.2f}, gal = {var3:.2f}, {var4:2f} l'

Answered By: Ehsan Fathi