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.

3voto

Geoff Fergusson Punkte 29

Ich bin ein Python-Anfänger, aber ein erfahrener Programmierer. Ich habe Python 3.5, daher kann ich einfach das Komma verwenden, aber dies ist dennoch eine interessante Übung zum Programmieren. Betrachten Sie den Fall einer vorzeichenlosen Ganzzahl. Das lesbarste Python-Programm zum Hinzufügen von Tausendertrennzeichen scheint zu sein:

def add_commas(instr):
    out = [instr[0]]
    for i in range(1, len(instr)):
        if (len(instr) - i) % 3 == 0:
            out.append(',')
        out.append(instr[i])
    return ''.join(out)

Es ist auch möglich, eine Listenabstraktion zu verwenden:

add_commas(instr):
    rng = reversed(range(1, len(instr) + (len(instr) - 1)//3 + 1))
    out = [',' if j%4 == 0 else instr[-(j - j//4)] for j in rng]
    return ''.join(out)

Dies ist kürzer und könnte einzeilig sein, aber Sie müssen einige geistige Gymnastik betreiben, um zu verstehen, warum es funktioniert. In beiden Fällen erhalten wir:

for i in range(1, 11):
    instr = '1234567890'[:i]
    print(instr, add_commas(instr))

1 1
12 12
123 123
1234 1,234
12345 12,345
123456 123,456
1234567 1,234,567
12345678 12,345,678
123456789 123,456,789
1234567890 1,234,567,890

Die erste Version ist die vernünftigere Wahl, wenn Sie möchten, dass das Programm verstanden wird.

2voto

Verwenden Sie Trennzeichen und Dezimalstellen zusammen in Gleitkommazahlen: (In diesem Beispiel zwei Dezimalstellen)

large_number = 4545454.26262666
print(f"Formatiert: {large_number:,.2f}")

Ergebnis: Formatiert: 4.545.454,26

2voto

Manrique Punkte 1790

Universelle Lösung

Ich habe einige Probleme mit dem Punkt als Tausendertrennzeichen in den bisherigen am höchsten bewerteten Antworten gefunden. Ich habe eine universelle Lösung entworfen, bei der Sie verwenden können, was Sie wollen, ohne die Sprachumgebung zu ändern. Ich weiß, dass es nicht die eleganteste Lösung ist, aber sie erledigt die Arbeit. Fühlen Sie sich frei, sie zu verbessern!

def format_integer(number, thousand_separator='.'):
    def reverse(string):
        string = "".join(reversed(string))
        return string

    s = reverse(str(number))
    count = 0
    result = ''
    for char in s:
        count = count + 1
        if count % 3 == 0:
            if len(s) == count:
                result = char + result
            else:
                result = thousand_separator + char + result
        else:
            result = char + result
    return result

print(format_integer(50))
# 50
print(format_integer(500))
# 500
print(format_integer(50000))
# 50.000
print(format_integer(50000000))
# 50.000.000

1voto

Edward van Kuik Punkte 1327

Hier ist ein Beispiel, das auch für Floats funktioniert:

def float2comma(f):
    s = str(abs(f)) # In String umwandeln
    decimalposition = s.find(".") # Nach Dezimalpunkt suchen
    if decimalposition == -1:
        decimalposition = len(s) # Wenn kein Dezimalpunkt vorhanden ist, dann einfach vom Ende aus arbeiten
    out = "" 
    for i in range(decimalposition+1, len(s)): # Den Dezimalpunkt machen
        if not (i-decimalposition-1) % 3 and i-decimalposition-1: out = out+","
        out = out+s[i]      
    if len(out):
        out = "."+out # Den Dezimalpunkt hinzufügen, wenn nötig
    for i in range(decimalposition-1,-1,-1): # Rückwärts vom Dezimalpunkt arbeiten
        if not (decimalposition-i-1) % 3 and decimalposition-i-1: out = ","+out
        out = s[i]+out      
    if f < 0:
        out = "-"+out
    return out

Verwendungsbeispiel:

>>> float2comma(10000.1111)
'10,000.111,1'
>>> float2comma(656565.122)
'656,565.122'
>>> float2comma(-656565.122)
'-656,565.122'

1 Stimmen

float2comma(12031023.1323) gibt zurück: '12,031,023.132,3'

1voto

Collin Anderson Punkte 13449

Eine Zeile für Python 2.5+ und Python 3 (nur positive ganze Zahlen):

''.join(reversed([x + (',' if i and not i % 3 else '') for i, x in enumerate(reversed(str(1234567)))]))

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