Float in String umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
adgde
User
Beiträge: 2
Registriert: Montag 10. September 2007, 11:55

Hallo

wie kann ich einen Float in einen String umwandeln, so dass ich die Anzahl der Nachkommastellen definieren kann. Jedoch nur Nachkommastellen ausgegeben werden, wenn auch welche vorhanden sind.

Wenn ich die Python-Dokumentation richtig gelesen habe, sollte folgendes genau dies machen. Jedoch werden bei mit immer Nachkommastellen ausgegeben.

Code: Alles auswählen

print '%.3f' % 123.456789 #OK
print '%.3f' % 123 # Gibt 123.000 ...
Obwohl dieses Verhalten wohl nur bei der "alternativen" Umwandlung (mit #) eintreten sollte. (?)

Hat jemand einen Tipp für mich, danke. :?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo adgde,

also ich hatte bisher nie was anderes erwartet als das immer 2 Nachkommastellen aufgeführt werden,
sofern ich welche angebe. Selbst wenn es nur Nullen sind.
Ich hab leider keine Ahnung ob es für solche Zwecke spezielle Formatierungsmethoden gibt.
Außer einem if - else Kontrukt fällt mir als Einzeiler nur dieses hässliche Ding ein ;)

Code: Alles auswählen

In [49]: x = 100.11
In [50]: "".join(["%.", (x % 1.0 and "2" or "0"), "f"]) % x
Out[50]: '100.11'

In [51]: x = 100.0000

In [52]: "".join(["%.", (x % 1.0 and "2" or "0"), "f"]) % x
Out[52]: '100'
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Code: Alles auswählen

if isinstance(zahl, int):
    print str(zahl)[:3] # [:3] weglassen, wenn nicht nur die ersten drei Ziffern ausgegeben werden sollen, wurde aus der Frage nicht ganz klar
else:
    print '%.3f'
BlackJack

Versuch's mal mit '%g':

Code: Alles auswählen

In [116]: '%.3g' % 0.12345
Out[116]: '0.123'

In [117]: '%.3g' % 0.1
Out[117]: '0.1'
adgde
User
Beiträge: 2
Registriert: Montag 10. September 2007, 11:55

Erst einmal vielen Dank für eure Antworten.

@rafael: Ich hatte vergessen zu erwähnen, dass alle Zahlen die ich umwandeln möchte den Typ Float haben.

@BlackJack: Mit '%g' scheint es Probleme mit der Precision zu geben.

Code: Alles auswählen

print '%.3g' % 123.45678 # 123
Also irgendwie werde ich aus http://docs.python.org/lib/typesseq-strings.html nicht so recht schlau. Steht dort nicht, dass '%f' nur Nachkommastellen anzeigt, wenn auch welche vorhanden sind? (jedenfalls, wenn man Note 3 interpretiert :wink: )
Antworten