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.

-1voto

PythonProgrammi Punkte 20089

Italien:

>>> import locale
>>> locale.setlocale(locale.LC_ALL,"")
'Italian_Italy.1252'
>>> f"{1000:n}"
'1.000'

-1voto

user650654 Punkte 4800

Hier ist eine weitere Variante mit Verwendung einer Generator-Funktion, die für Ganzzahlen funktioniert:

def ncomma(num):
    def _helper(num):
        # assert isinstance(numstr, basestring)
        numstr = '%d' % num
        for ii, digit in enumerate(reversed(numstr)):
            if ii and ii % 3 == 0 and digit.isdigit():
                yield ','
            yield digit

    return ''.join(reversed([n for n in _helper(num)]))

Und hier ist ein Test:

>>> for i in (0, 99, 999, 9999, 999999, 1000000, -1, -111, -1111, -111111, -1000000):
...     print i, ncomma(i)
... 
0 0
99 99
999 999
9999 9,999
999999 999,999
1000000 1,000,000
-1 -1
-111 -111
-1111 -1,111
-111111 -111,111
-1000000 -1,000,000

-2voto

twneale Punkte 2716

Erstellen Sie einfach eine Unterklasse von long (oder float oder was auch immer). Dies ist sehr praktisch, denn so können Sie Ihre Zahlen immer noch in mathematischen Operationen verwenden (und damit vorhandenen Code), aber sie werden alle schön in Ihrem Terminal angezeigt.

>>> class number(long):

        def __init__(self, value):
            self = value

        def __repr__(self):
            s = str(self)
            l = [x for x in s if x in '1234567890']
            for x in reversed(range(len(s)-1)[::3]):
                l.insert(-x, ',')
            l = ''.join(l[1:])
            return ('-'+l if self < 0 else l) 

>>> number(-100000)
-100,000
>>> number(-100)
-100
>>> number(-12345)
-12,345
>>> number(928374)
928,374
>>> 345

8 Stimmen

Ich finde die Unterklassen-Idee gut, aber ist __repr__() die richtige Methode zum Überschreiben? Ich würde vorschlagen, __str__() zu überschreiben und __repr__() unverändert zu lassen, denn int(repr(number(928374))) sollte funktionieren, aber int() wird bei den Kommas abbrechen.

0 Stimmen

@steveha hat einen guten Punkt, aber die Rechtfertigung hätte sein sollen, dass number(repr(number(928374))) nicht funktioniert, nicht int(repr(number(928374))). Trotzdem sollte, um diesen Ansatz direkt mit print zu verwenden, wie der OP angefordert hat, die Methode __str__() überschrieben werden, anstatt __repr__(). Unabhängig davon scheint es einen Fehler in der Kernkomma-Einfügelogik zu geben.

-8voto

Jennifer Punkte 1

Für Gleitkommazahlen:

float(filter(lambda x: x!=',', '1,234.52'))
# gibt 1234.52 zurück

Für Ganzzahlen:

int(filter(lambda x: x!=',', '1,234'))
# gibt 1234 zurück

5 Stimmen

Das entfernt die Kommata. Zwar praktisch, aber der Ersteller hat nach einer Möglichkeit gefragt, sie hinzuzufügen. Außerdem könnte etwas wie float('1,234.52'.translate(None, ',')) geradliniger und möglicherweise schneller sein.

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