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.
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.
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
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
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.
@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.
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.
0 Stimmen
Dies ist eine schreckliche Idee, verwenden Sie niemals
','
noch'.'
als Dezimaltrennzeichen.