66 Stimmen

Hinzufügen von Tausendertrennzeichen mit 'Dezimalzeichen' zu einer Zahl

Wie formatiere ich 1000000 a 1.000.000 in Python?, wobei das '.' das Tausendertrennzeichen für das Dezimalzeichen ist.

3 Stimmen

Bitte klären Sie Ihre Frage. Zeigen Sie etwas Code, nennen Sie den Datentyp des Objekts, das Sie ausdrucken möchten, geben Sie ein Beispiel für die Ausgabe.

0 Stimmen

Sie können nicht mehr als einen Dezimalpunkt in einer Zahl haben. Was ist 1.000.000 bedeuten soll? Meinen Sie Kommas?

33 Stimmen

@Noufal: in einigen Gegenden, . verwendet wird, statt , um Tausende zu trennen.

1voto

Marcus Seuser Punkte 71

In Anlehnung an die Antwort von Mikel habe ich seine Lösung wie folgt in meinem matplotlib-Plot implementiert. Ich dachte, einige könnten es hilfreich finden:

ax=plt.gca()
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))

1voto

Andrey Tyukin Punkte 40989

Seltsam, dass niemand eine unkomplizierte Lösung mit regex erwähnt hat:

import re
print(re.sub(r'(?<!^)(?=(\d{3})+$)', r'.', "12345673456456456"))

Ergibt die folgende Ausgabe:

12.345.673.456.456.456

Es funktioniert auch, wenn Sie die Ziffern nur vor dem Komma trennen wollen:

re.sub(r'(?<!^)(?=(\d{3})+,)', r'.', "123456734,56456456")

gibt:

123.456.734,56456456

Der Regex verwendet Lookahead, um zu prüfen, ob die Anzahl der Ziffern nach einer bestimmten Position durch 3 teilbar ist.


Aktualisierung 2021: Bitte verwenden Sie dies nur für Skripte (d.h. nur in Situationen, in denen Sie den Code nach der Verwendung zerstören können). Bei Verwendung in einer Anwendung würde dieser Ansatz eine ReDoS .

1voto

JATIN Punkte 45

DIY-Lösung

def format_number(n):
    result = ""
    for i, digit in enumerate(reversed(str(n))):
        if i != 0 and (i % 3) == 0:
            result += ","
        result += digit
    return result[::-1]

Einbaulösung

def format_number(n):
    return "{:,}".format(n)

0voto

Anand Tripathi Punkte 11485

Hier ist nur eine alternative Antwort. Sie können den Split-Operator in Python verwenden und durch einige seltsame Logik Hier ist der Code

i=1234567890
s=str(i)
str1=""
s1=[elm for elm in s]
if len(s1)%3==0:
    for i in range(0,len(s1)-3,3):
        str1+=s1[i]+s1[i+1]+s1[i+2]+"."
    str1+=s1[i]+s1[i+1]+s1[i+2]
else:
    rem=len(s1)%3
    for i in range(rem):
        str1+=s1[i]
    for i in range(rem,len(s1)-1,3):
        str1+="."+s1[i]+s1[i+1]+s1[i+2]

print str1

Ausgabe

1.234.567.890

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