1242 Stimmen

Wie man eine Zahl mit Kommas als Tausendertrennzeichen druckt

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.

0 Stimmen

Dies ist eine schreckliche Idee, verwenden Sie niemals ',' noch '.' als Dezimaltrennzeichen.

45voto

elPastor Punkte 7360

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)

45voto

Daniel Fortunov Punkte 40842

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'

Wie es funktioniert

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

1 Stimmen

Benutze den Verbose-Modus und du kannst Kommentare direkt im Code haben

0 Stimmen

Konnten Sie das "(?!\d)" nicht durch ein "$ " ersetzen?

24voto

Diogo Punkte 1027

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'

21voto

Martin Thoma Punkte 105621

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)

Beispiele

'{:,.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

0 Stimmen

Etwas kürzer: '{:,.2f}'.format(12345.6789).replace('.', ',').replace(',', '.')

17voto

RookieCoder Punkte 121

Hier sind einige Möglichkeiten, es mit Formatierung zu tun (kompatibel mit floats und ints)

num = 2437.68

# Weg 1: String-Formatierung

'{:,}'.format(num)
>>> '2,437.68'

# Weg 2: F-Strings

f'{num:,}'
>>> '2,437.68'

# Weg 3: Eingebaute Formatierungsfunktion

format(num, ',')
>>> '2,437.68'

CodeJaeger.com

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.

Powered by:

X