web-dev-qa-db-fra.com

Python, affiche tous les flottants jusqu'à 2 décimales dans la sortie

J'ai besoin de produire 4 flotteurs différents à deux décimales.

C'est ce que j'ai

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

Ce qui est très impur et a l’air mauvais. Existe-t-il un moyen de faire flotter dans cette sortie '% .2f'?

Remarque: Utilisation de Python 2.6.

59
Omar

Eh bien, je voudrais au moins le nettoyer comme suit:

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

Si vous souhaitez simplement convertir les valeurs en chaînes de style Nice, procédez comme suit:

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

Vous pouvez également imprimer les unités comme dans votre 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'

La deuxième méthode vous permet de modifier facilement le délimiteur (tabulation, espaces, nouvelles lignes, peu importe) pour répondre facilement à vos besoins; le délimiteur pourrait également être un argument de fonction au lieu d'être codé en dur.

Edit: Pour utiliser votre syntaxe 'nom = valeur', changez simplement l'opération élément par s dans la compréhension de la liste:

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'
25
awesomo

Format de la syntaxe de chaîne.

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)

La sortie serait:

'3.14, kg=6.28, lb=9.42, gal=12.57'
22
Chikipowpow

Si vous recherchez la lisibilité, je pense que c'est ce code:

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

Je viens de découvrir la fonction round - elle est dans Python 2.7, pas sûr de 2.6. Il prend un float et le nombre de dps comme arguments, donc round (22.55555, 2) donne le résultat 22.56.

5
Rioka

Si vous voulez que l'opération d'impression modifie automatiquement les valeurs flottantes pour n'afficher que deux décimales, envisagez d'écrire une fonction pour remplacer "imprimer". Par exemple:

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)

Utilisez fp () à la place de l'impression ...

fp("PI is", 3.14159) ... au lieu de ... print "PI is", 3.14159

2
Richard_M.

Pas directement dans la façon dont vous voulez écrire cela, non. Un des principes de conception de Python est "Explicite est meilleur qu'implicite" (voir import this). Cela signifie qu'il est préférable de décrire ce que vous voulez plutôt que de faire dépendre le format de sortie d'un paramètre de formatage global ou autre. Vous pouvez bien sûr formater votre code différemment pour le rendre plus joli:

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