Seite 1 von 1

Float in String umwandeln

Verfasst: Montag 10. September 2007, 12:04
von adgde
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. :?

Verfasst: Montag 10. September 2007, 12:56
von Zap
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'

Verfasst: Montag 10. September 2007, 13:03
von rafael

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'

Verfasst: Montag 10. September 2007, 13:09
von 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'

Verfasst: Montag 10. September 2007, 13:20
von adgde
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: )