wake-up-neo.com

Python, drucken Sie alle Gleitkommazahlen in der Ausgabe auf 2 Dezimalstellen

Ich muss 4 verschiedene Gleitkommazahlen mit zwei Dezimalstellen ausgeben.

Das habe ich:

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

Was sehr unrein ist und schlecht aussieht. Gibt es eine Möglichkeit, in dieser Ausgabe '% .2f' ein Floating zu erzeugen?

Hinweis: Verwenden Sie Python 2.6.

59
Omar

Nun, ich würde es zumindest wie folgt aufräumen:

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

Wenn Sie nur die Werte in gut aussehende Zeichenfolgen konvertieren möchten, gehen Sie wie folgt vor:

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

Alternativ können Sie auch die Einheiten ausdrucken, die Sie in Ihrer Frage haben:

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'

Mit der zweiten Möglichkeit können Sie das Trennzeichen (Tabulator, Leerzeichen, Zeilenumbrüche usw.) ganz einfach an Ihre Bedürfnisse anpassen. Das Trennzeichen kann auch ein Funktionsargument sein, anstatt fest codiert zu sein.

Edit: Um Ihre 'name = value'-Syntax zu verwenden, ändern Sie einfach die elementweise Operation innerhalb des Listenverständnisses:

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 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)

Die Ausgabe wäre:

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

Wenn Sie Lesbarkeit suchen, glaube ich, dass dies der Code ist:

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

Ich habe gerade die Rundungsfunktion entdeckt - sie ist in Python 2.7, nicht sicher über 2.6. Sie nimmt einen Gleitkommawert und die Anzahl der dps als Argumente an, also ergibt die Rundung (22.55555, 2) das Ergebnis 22,56.

5
Rioka

Wenn Sie möchten, dass der Druckvorgang den Gleitkommawert automatisch so ändert, dass nur 2 Dezimalstellen angezeigt werden, sollten Sie eine Funktion schreiben, die 'print' ersetzt. Zum Beispiel:

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)

Verwenden Sie fp () anstelle von print ...

fp("PI is", 3.14159) ... statt ... print "PI is", 3.14159

2
Richard_M.

Nicht direkt so, wie du das schreiben willst, nein. Eine der Gestaltungslehre von Python ist "Explizit ist besser als implizit" (siehe import this). Dies bedeutet, dass es besser ist zu beschreiben, was Sie wollen, als dass das Ausgabeformat von einer globalen Formatierungseinstellung oder etwas anderem abhängt. Sie können Ihren Code natürlich auch anders formatieren, damit er besser aussieht:

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