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.
AKTUALISIERUNG: Ich bin mir sicher, dass es eine Standardbibliotheksfunktion dafür geben muss, aber es hat Spaß gemacht, zu versuchen, sie selbst mit Rekursion zu schreiben. Hier ist, was ich herausgefunden habe:
sep = ',' # einige Länder haben '.' und Python 3 sieht es als float an
if type(x) is not int and type(x) is not float:
raise TypeError("Keine Zahl!")
if x < 0:
return '-' + intToStringWithCommas(-x)
elif x < 1000:
return str(x)
else:
return intToStringWithCommas(x / 1000) + sep + '%03d' % (x % 1000)
Aber wenn jemand tatsächlich einen Standardweg findet, um dies zu tun, sollte man das stattdessen verwenden.
Leider funktioniert dies nicht in allen Fällen. intToStringWithCommas(1000.1) -> '1.0001.000'
Er sagte speziell Ganzzahlen und dass es so einfach wie möglich sein sollte, deshalb entschied ich mich, Datentypen außer Ganzzahlen nicht zu behandeln. Ich habe auch im Funktionsnamen _int_ToStringWithCommas explizit gemacht. Jetzt habe ich auch ein raise hinzugefügt, um es klarer zu machen.
Von den Kommentaren zum Rezept 498181 von activestate habe ich dies überarbeitet:
import re
def thous(x, sep=',', dot='.'):
num, _, frac = str(x).partition(dot)
num = re.sub(r'(\d{3})(?=\d)', r'\1'+sep, num[::-1])[::-1]
if frac:
num += dot + frac
return num
Es verwendet die Funktion der regulären Ausdrücke: lookahead d.h. (?=\d)
um sicherzustellen, dass nur Gruppen von drei Ziffern, die eine Ziffer 'nach' sich haben, ein Komma erhalten. Ich sage 'nach', weil der String zu diesem Zeitpunkt umgekehrt ist.
[::-1]
dreht einfach einen String um.
Von Python-Version 2.6 aus können Sie dies tun:
def format_builtin(n):
return format(n, ',')
Für Python-Versionen < 2.6 und nur zur Information, hier sind 2 manuelle Lösungen, die Floats in Ganzzahlen umwandeln, aber negative Zahlen korrekt verarbeiten:
def format_number_using_lists(number):
string = '%d' % number
result_list = list(string)
indexes = range(len(string))
for index in indexes[::-3][1:]:
if result_list[index] != '-':
result_list.insert(index+1, ',')
return ''.join(result_list)
Ein paar Dinge, die hier zu beachten sind:
Und eine hardcore-Version:
def format_number_using_generators_and_list_comprehensions(number):
string = '%d' % number
generator = reversed(
[
value+',' if (index!=0 and value!='-' and index%3==0) else value
for index,value in enumerate(reversed(string))
]
)
return ''.join(generator)
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.