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.
_
als Tausendertrennzeichenf'{value:_}' # Für Python 3.6
,
als Tausendertrennzeichen'{:,}'.format(value) # Für Python 2.7
f'{value:,}' # Für Python 3.6
import locale
locale.setlocale(locale.LC_ALL, '') # Verwenden Sie '' für automatisch oder erzwingen Sie z.B. 'en_US.UTF-8'
'{:n}'.format(value) # Für Python 2.7
f'{value:n}' # Für Python 3.6
Gemäß Format Specification Mini-Language,
Die Option
','
signalisiert die Verwendung eines Kommas als Tausendertrennzeichen. Für ein ortsabhängiges Trennzeichen verwenden Sie stattdessen den Typ'n'
für Ganzzahlen-Präsentationen.
und:
Die Option
'_'
signalisiert die Verwendung eines Unterstrichs als Tausendertrennzeichen für Fließkommazahlen-Präsentationen und für den Ganzzahlen-Präsentationstyp'd'
. Für die Ganzzahlen-Präsentationstypen'b'
,'o'
,'x'
und'X'
werden Unterstriche alle 4 Stellen eingefügt.
Bitte beachten Sie, dass dies außerhalb der USA und einigen anderen Orten nicht korrekt ist. In diesem Fall ist die gewählte locale.format() die richtige Antwort.
Es überrascht mich, dass niemand erwähnt hat, dass Sie dies mit f-Strings in Python 3.6+ genauso einfach tun können:
>>> num = 10000000
>>> print(f"{num:,}")
10.000.000
... wobei der Teil nach dem Doppelpunkt der Formatangabe ist. Das Komma ist das Trennzeichen, das Sie verwenden möchten, daher verwendet f"{num:_}"
Unterstriche anstelle eines Kommas. Mit dieser Methode können nur "," und "_" verwendet werden.
Dies entspricht der Verwendung von format(num, ",")
für ältere Versionen von Python 3.
Das mag magisch aussehen, wenn Sie es zum ersten Mal sehen, ist es aber nicht. Es ist nur Teil der Sprache und etwas, das häufig genug benötigt wird, um eine Abkürzung verfügbar zu haben. Um mehr darüber zu erfahren, werfen Sie einen Blick auf die Gruppen-Subkomponente.
Das ist einfacher als jede der höher bewerteten Antworten und erfordert keine zusätzlichen Imports.
@Z4-Tier Dies liegt wahrscheinlich daran, dass nicht viele Menschen überhaupt wissen, dass f-Strings existieren oder was sie sind.
@NoName Diese Antwort erwähnt auch, wie man es mit str.format()
macht, was auf allen Versionen von python3 funktioniert, fast genauso einfach ist und keine f-Strings verwendet.
Ich habe das zum Laufen gebracht:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'en_US')
'en_US'
>>> locale.format_string("%d", 1255000, grouping=True)
'1,255,000'
Sicher, du brauchst keine Unterstützung für Internationalisierung, aber es ist klar, prägnant und verwendet eine eingebaute Bibliothek.
P.S. Das "%d" ist der übliche %-Style-Formatter. Du kannst nur einen Formatter haben, aber er kann alles sein, was du in Bezug auf Feldbreite und Genauigkeitseinstellungen benötigst.
P.P.S. Wenn du locale
nicht zum Laufen bekommst, würde ich eine modifizierte Version von Marks Antwort vorschlagen:
def intWithCommas(x):
if type(x) not in [type(0), type(0L)]:
raise TypeError("Parameter muss eine ganze Zahl sein.")
if x < 0:
return '-' + intWithCommas(-x)
result = ''
while x >= 1000:
x, r = divmod(x, 1000)
result = ",%03d%s" % (r, result)
return "%d%s" % (x, result)
Rekursion ist nützlich für den negativen Fall, aber eine Rekursion pro Komma erscheint mir etwas übertrieben.
P.P.P.S. Ältere Pythons verwendeten format
anstelle von format_string
.
Ich habe deinen Code ausprobiert und leider erhalte ich Folgendes: "locale.Error: unsupported locale setting". :-s
Ich habe immer die Verwendung der Lokalisierungs-Bibliothek als nicht intuitiv und etwas komplex empfunden. Jedes Mal, wenn ich sie verwenden muss, muss ich nachschauen. Ich kann mich nicht auf Anhieb daran erinnern, wie es geht.
Mark: Wenn Sie auf Linux sind, möchten Sie vielleicht prüfen, was in Ihrer /etc/locale.gen steht oder was auch immer Ihr glibc verwendet, um seine Lokalisierungen zu erstellen. Sie könnten auch versuchen ""en", "en_US.utf8", "en_US.UTF-8", 'en_UK" (sp?), usw. Mikez: Es muss ein Buch geben: "Dr. PEP: Oder wie ich lernte, aufzuhören, mir Sorgen zu machen und docs.python.org zu lieben." Ich habe aufgehört, alle Bibliotheken um Python 1.5.6 herum auswendig zu lernen. Was die locale
betrifft, verwende ich so wenig wie möglich davon.
Wurde für die ineffizienteste und am schwersten lesbare Methode zur Beantwortung dieser Frage hochgestuft.
Es wäre schön, wenn dies zumindest funktionieren würde. Probieren Sie diese Nummer "17371830" aus, sie wird zu "173.718.3.0" =)
Perioden? Das ist nicht einmal möglich, Kumpel. Dieses Stück Schrott ignoriert völlig die Lokalisierung. Ich frage mich, wie du dieses Ergebnis bekommen hast. Dein Beispiel ergibt bei mir '17,371,830', wie erwartet.
Hier ist der Ländercode nach Entfernen irrelevanter Teile und einer kleinen Bereinigung:
(Das Folgende funktioniert nur für ganze Zahlen)
def gruppe(nummer):
s = '%d' % nummer
gruppen = []
while s and s[-1].isdigit():
gruppen.append(s[-3:])
s = s[:-3]
return s + ','.join(reversed(gruppen))
>>> gruppe(-23432432434.34)
'-23,432,432,434'
Es gibt bereits einige gute Antworten hier. Ich möchte dies nur für zukünftige Referenzen hinzufügen. In Python 2.7 wird es einen Formatierungsspezifikator für Tausendertrennzeichen geben. Laut Python-Dokumentation funktioniert es so:
>>> '{:20,.2f}'.format(f)
'18,446,744,073,709,551,616.00'
In Python 3.1 können Sie dasselbe wie folgt tun:
>>> format(1234567, ',d')
'1,234,567'
Ja, die schwierigeren Wege sind hauptsächlich für Leute auf älteren Pythons gedacht, wie sie beispielsweise in RHEL und anderen Langzeit-Support-Distributionen enthalten sind.
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.