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.

12voto

Mark Byers Punkte 761508

AKTUALISIERUNG: Ich bin mir sicher, dass es eine Standardbibliotheksfunktion dafür geben muss, aber es hat Spaß gemacht, zu versuchen, sie selbst mit Rekursion zu schreiben. Hier ist, was ich herausgefunden habe:

sep = ','   # einige Länder haben '.' und Python 3 sieht es als float an

if type(x) is not int and type(x) is not float:
    raise TypeError("Keine Zahl!")
if x < 0:
    return '-' + intToStringWithCommas(-x)
elif x < 1000:
    return str(x)
else:
    return intToStringWithCommas(x / 1000) + sep + '%03d' % (x % 1000)

Aber wenn jemand tatsächlich einen Standardweg findet, um dies zu tun, sollte man das stattdessen verwenden.

0 Stimmen

Leider funktioniert dies nicht in allen Fällen. intToStringWithCommas(1000.1) -> '1.0001.000'

0 Stimmen

Er sagte speziell Ganzzahlen und dass es so einfach wie möglich sein sollte, deshalb entschied ich mich, Datentypen außer Ganzzahlen nicht zu behandeln. Ich habe auch im Funktionsnamen _int_ToStringWithCommas explizit gemacht. Jetzt habe ich auch ein raise hinzugefügt, um es klarer zu machen.

0 Stimmen

Test mit 1059803958903598

9voto

Magenta Nova Punkte 671

Die akzeptierte Antwort ist in Ordnung, aber ich bevorzuge tatsächlich format(number,','). Einfacher für mich zu interpretieren und zu merken.

https://docs.python.org/3/library/functions.html#format

0 Stimmen

Funktioniert perfekt, um auch zu vermeiden, dass zu viele Dezimalstellen für Gleitkommazahlen angezeigt werden.

8voto

Tom Viner Punkte 6365

Von den Kommentaren zum Rezept 498181 von activestate habe ich dies überarbeitet:

import re
def thous(x, sep=',', dot='.'):
    num, _, frac = str(x).partition(dot)
    num = re.sub(r'(\d{3})(?=\d)', r'\1'+sep, num[::-1])[::-1]
    if frac:
        num += dot + frac
    return num

Es verwendet die Funktion der regulären Ausdrücke: lookahead d.h. (?=\d) um sicherzustellen, dass nur Gruppen von drei Ziffern, die eine Ziffer 'nach' sich haben, ein Komma erhalten. Ich sage 'nach', weil der String zu diesem Zeitpunkt umgekehrt ist.

[::-1] dreht einfach einen String um.

8voto

Adam Starrh Punkte 5651

Python 3

--

Ganzzahlen (ohne Dezimalstellen):

"{:,d}".format(1234567)

--

Fließkommazahlen (mit Dezimalstellen):

"{:,.2f}".format(1234567)

wobei die Zahl vor f die Anzahl der Dezimalstellen angibt.

--

Bonus

Schnelle und schmutzige Starterfunktion für das indische Lakh/Crore-Zahlensystem (12,34,567):

https://stackoverflow.com/a/44832241/4928578

6voto

arka Punkte 69

Von Python-Version 2.6 aus können Sie dies tun:

def format_builtin(n):
    return format(n, ',')

Für Python-Versionen < 2.6 und nur zur Information, hier sind 2 manuelle Lösungen, die Floats in Ganzzahlen umwandeln, aber negative Zahlen korrekt verarbeiten:

def format_number_using_lists(number):
    string = '%d' % number
    result_list = list(string)
    indexes = range(len(string))
    for index in indexes[::-3][1:]:
        if result_list[index] != '-':
            result_list.insert(index+1, ',')
    return ''.join(result_list)

Ein paar Dinge, die hier zu beachten sind:

  • diese Zeile: string = '%d' % number konvertiert eine Zahl schön in einen String um, unterstützt Negative und entfernt Brüche von Floats, wodurch sie zu Ganzzahlen werden;
  • dieser Slice indexes[::-3] gibt jedes dritte Element beginnend vom Ende zurück, also habe ich einen weiteren Slice [1:] verwendet, um das letzte Element zu entfernen, da ich kein Komma nach der letzten Zahl brauche;
  • diese Bedingung if l[index] != '-' wird verwendet, um negative Zahlen zu unterstützen, fügen Sie kein Komma nach dem Minuszeichen ein.

Und eine hardcore-Version:

def format_number_using_generators_and_list_comprehensions(number):
    string = '%d' % number
    generator = reversed( 
        [
            value+',' if (index!=0 and value!='-' and index%3==0) else value
            for index,value in enumerate(reversed(string))
        ]
    )
    return ''.join(generator)

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