Wie drucke ich eine Ganzzahl mit Kommas als Tausendertrennzeichen?
1234567 1.234.567
Es muss nicht standortspezifisch sein, um zwischen Punkten und Kommas zu entscheiden.
Wie drucke ich eine Ganzzahl mit Kommas als Tausendertrennzeichen?
1234567 1.234.567
Es muss nicht standortspezifisch sein, um zwischen Punkten und Kommas zu entscheiden.
Das ist, was ich für Fließkommazahlen mache. Obwohl ich ehrlich gesagt nicht sicher bin, für welche Versionen es funktioniert - ich benutze 2.7:
my_number = 4385893.382939491
my_string = '{:0,.2f}'.format(my_number)
Ergebnis: 4,385,893.38
Update: Ich hatte kürzlich ein Problem mit diesem Format (ich könnte Ihnen den genauen Grund nicht nennen), konnte es aber beheben, indem ich die 0
wegließ:
my_string = '{:,.2f}'.format(my_number)
Here's a one-line regex replacement:
re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%d" % val)
Funktioniert nur für ganze Zahlen:
import re
val = 1234567890
re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%d" % val)
# Gibt zurück: '1,234,567,890'
val = 1234567890.1234567890
# Gibt zurück: '1,234,567,890'
Oder für Gleitkommazahlen mit weniger als 4 Dezimalstellen, ändere den Format-Spezifizierer auf %.3f
:
re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%.3f" % val)
# Gibt zurück: '1,234,567,890.123'
NB: Funktioniert nicht korrekt mit mehr als drei Dezimalstellen, da es versucht, den Dezimalteil zu gruppieren:
re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%.5f" % val)
# Gibt zurück: '1,234,567,890.12,346'
Lassen Sie uns das zerlegen:
re.sub(pattern, repl, string)
pattern = \
"(\d) # Finde eine Ziffer...
(?= # die gefolgt wird von...
(\d{3})+ # einer oder mehr Gruppen von drei Ziffern...
(?!\d) # die nicht von weiteren Ziffern gefolgt werden.
)",
repl = \
r"\1,", # Ersetze diese eine Ziffer durch sich selbst, gefolgt von einem Komma,
# und suche später im String nach weiteren Übereinstimmungen.
# (re.sub() ersetzt alle Übereinstimmungen, die es im Eingabestring findet)
string = \
"%d" % val # Formatiere den String zunächst als Dezimalzahl
Sie können auch '{:n}'.format( Wert )
für eine Lokalerepräsentation verwenden. Ich denke, das ist der einfachste Weg für eine Lösung mit Lokalisierung.
Für weitere Informationen suchen Sie nach Tausender
in Python-DOK.
Für Währung können Sie locale.currency
verwenden, indem Sie das Flag grouping
setzen:
Code
import locale
locale.setlocale( locale.LC_ALL, '' )
locale.currency( 1234567.89, grouping = True )
Ausgabe
'Portugiesisch_Brasilien.1252'
'R$ 1.234.567,89'
Etwas erweitert die Antwort von Ian Schneider:
Wenn Sie einen benutzerdefinierten Tausendertrenner verwenden möchten, ist die einfachste Lösung:
'{:,}'.format(value).replace(',', your_custom_thousands_separator)
'{:,.2f}'.format(123456789.012345).replace(',', ' ')
Wenn Sie die deutsche Darstellung wünschen, wird es etwas komplizierter:
('{:,.2f}'.format(123456789.012345)
.replace(',', ' ') # Tausendertrennzeichen 'speichern'
.replace('.', ',') # Punkt durch Komma ersetzen
.replace(' ', '.')) # Tausendertrennzeichen durch Punkt ersetzen
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Dies ist eine schreckliche Idee, verwenden Sie niemals
','
noch'.'
als Dezimaltrennzeichen.