Python alle 3 ziffern Hunderter punkt( Taschenrechner)?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Ist es dir sehr wichtig, dass das Tausendertrennzeichen ein Punkt ist und kein Komma? Ich nutze meistens die internationale Schreibweise. Nicht, weil ich sie besser finde, sondern weil ich in Projekten arbeite, wo man international sich auf einen Standard geeignigt hat. Hierfür ist es nämlich ganz einfach:

a = 1000000
print("Die volle Zahl lautet {:d}. Und jetzt mit Trennzeichen: {:,}".format(a, a))

Die Inhalte mit geschweifter Klammer nennen sich "Formatter". Das Prinzip ist wiefolgt: Man setzt einen Formatter als Platzhalter im Text (String) und gibt dahinter mit ".format()" an, was man dort reinhaben möchte. Im obigen Fall fügt er sowohl für {:d} (einfacher Integer) und für {:,} (Zahl mit Tausendertrennzeichen) die Variable "a" ein.

Ich habe gelesen, dass es auch Möglichkeiten gibt, das ganze mit "punkt" zu lösen, dafür musst du aber andere Module importieren. Oder du machst es total hässlich und prüfst, wie lang die Zahl ist, zerrst die Zahl als String auseinander und setzt sie mit Kommas wieder zusammen. Aber das wäre, wie gesagt, extrem unschön programmiert.

andie00  17.09.2018, 23:15

Du könntest auch mit replace() den Beistrich als Tausendertrennzeichen durch einen Punkt ersetzen:

a = 1000000
print("Die volle Zahl lautet {:d}. Und jetzt mit Trennzeichen: {:,}".format(a, a).replace(",","."))
1
offeltoffel  17.09.2018, 23:17
@andie00

Gute Idee!

Wenn es wirklich nur für die Anzeige ist und der Übersichtlichkeit dient, ist das sicher ok. Schwierig wird es, wenn beim Taschenrechner auch Kommazahlen kommen. Dann müsste man wohl erst den Dezimalpunkt in ein beliebiges Zeichen abändern, das Tausenderkomma in einen Punkt und das beliebige Zeichen in ein Komma.

Irgendwie bin ich kein Fan von solchem String-Geschachere, aber für ein Schulprojekt wirds sicher reichen. Finde es auch gut, dass der Fragesteller auf "Kosmetik" achtet.

1
andie00  17.09.2018, 23:48
@offeltoffel

Stimmt für eine Kommazahl wirds etwas aufwendiger (und unübersichtlicher):

a = 1000000.99
b="{:,}".format(a)
print(b.replace(".",",").replace(",",".",(b.count(","))))
# Ausgabe: 1.000.000,99
1