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.
Ich bin ein Python-Anfänger, aber ein erfahrener Programmierer. Ich habe Python 3.5, daher kann ich einfach das Komma verwenden, aber dies ist dennoch eine interessante Übung zum Programmieren. Betrachten Sie den Fall einer vorzeichenlosen Ganzzahl. Das lesbarste Python-Programm zum Hinzufügen von Tausendertrennzeichen scheint zu sein:
def add_commas(instr):
out = [instr[0]]
for i in range(1, len(instr)):
if (len(instr) - i) % 3 == 0:
out.append(',')
out.append(instr[i])
return ''.join(out)
Es ist auch möglich, eine Listenabstraktion zu verwenden:
add_commas(instr):
rng = reversed(range(1, len(instr) + (len(instr) - 1)//3 + 1))
out = [',' if j%4 == 0 else instr[-(j - j//4)] for j in rng]
return ''.join(out)
Dies ist kürzer und könnte einzeilig sein, aber Sie müssen einige geistige Gymnastik betreiben, um zu verstehen, warum es funktioniert. In beiden Fällen erhalten wir:
for i in range(1, 11):
instr = '1234567890'[:i]
print(instr, add_commas(instr))
1 1
12 12
123 123
1234 1,234
12345 12,345
123456 123,456
1234567 1,234,567
12345678 12,345,678
123456789 123,456,789
1234567890 1,234,567,890
Die erste Version ist die vernünftigere Wahl, wenn Sie möchten, dass das Programm verstanden wird.
Ich habe einige Probleme mit dem Punkt als Tausendertrennzeichen in den bisherigen am höchsten bewerteten Antworten gefunden. Ich habe eine universelle Lösung entworfen, bei der Sie verwenden können, was Sie wollen, ohne die Sprachumgebung zu ändern. Ich weiß, dass es nicht die eleganteste Lösung ist, aber sie erledigt die Arbeit. Fühlen Sie sich frei, sie zu verbessern!
def format_integer(number, thousand_separator='.'):
def reverse(string):
string = "".join(reversed(string))
return string
s = reverse(str(number))
count = 0
result = ''
for char in s:
count = count + 1
if count % 3 == 0:
if len(s) == count:
result = char + result
else:
result = thousand_separator + char + result
else:
result = char + result
return result
print(format_integer(50))
# 50
print(format_integer(500))
# 500
print(format_integer(50000))
# 50.000
print(format_integer(50000000))
# 50.000.000
Hier ist ein Beispiel, das auch für Floats funktioniert:
def float2comma(f):
s = str(abs(f)) # In String umwandeln
decimalposition = s.find(".") # Nach Dezimalpunkt suchen
if decimalposition == -1:
decimalposition = len(s) # Wenn kein Dezimalpunkt vorhanden ist, dann einfach vom Ende aus arbeiten
out = ""
for i in range(decimalposition+1, len(s)): # Den Dezimalpunkt machen
if not (i-decimalposition-1) % 3 and i-decimalposition-1: out = out+","
out = out+s[i]
if len(out):
out = "."+out # Den Dezimalpunkt hinzufügen, wenn nötig
for i in range(decimalposition-1,-1,-1): # Rückwärts vom Dezimalpunkt arbeiten
if not (decimalposition-i-1) % 3 and decimalposition-i-1: out = ","+out
out = s[i]+out
if f < 0:
out = "-"+out
return out
Verwendungsbeispiel:
>>> float2comma(10000.1111)
'10,000.111,1'
>>> float2comma(656565.122)
'656,565.122'
>>> float2comma(-656565.122)
'-656,565.122'
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.