66 Stimmen

Hinzufügen von Tausendertrennzeichen mit 'Dezimalzeichen' zu einer Zahl

Wie formatiere ich 1000000 a 1.000.000 in Python?, wobei das '.' das Tausendertrennzeichen für das Dezimalzeichen ist.

3 Stimmen

Bitte klären Sie Ihre Frage. Zeigen Sie etwas Code, nennen Sie den Datentyp des Objekts, das Sie ausdrucken möchten, geben Sie ein Beispiel für die Ausgabe.

0 Stimmen

Sie können nicht mehr als einen Dezimalpunkt in einer Zahl haben. Was ist 1.000.000 bedeuten soll? Meinen Sie Kommas?

33 Stimmen

@Noufal: in einigen Gegenden, . verwendet wird, statt , um Tausende zu trennen.

118voto

Mikel Punkte 23574

Wenn Sie ein Tausendertrennzeichen hinzufügen möchten, können Sie schreiben:

>>> '{0:,}'.format(1000000)
'1,000,000'

Es funktioniert aber nur in Python 2.7 und höher.

Ver Format-String-Syntax .

In älteren Versionen können Sie mit locale.format() :

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'en_AU.utf8'
>>> locale.format('%d', 1000000, 1)
'1,000,000'

den zusätzlichen Vorteil der Verwendung locale.format() ist, dass es das Tausendertrennzeichen Ihres Gebietsschemas verwendet, z. B.

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8')
'de_DE.utf-8'
>>> locale.format('%d', 1000000, 1)
'1.000.000'

1 Stimmen

Wenn Sie mit Währungen arbeiten, können Sie auch das Hilfsmittel babel.numbers.format_currency verwenden.

3 Stimmen

Für Floats lautet die Syntax {:6,.2f} donde 6 ist die Feldbreite und 2 ist die Genauigkeit. Die Platzierung des Kommas hat mich ein wenig verwirrt.

0 Stimmen

Sie können alle installierten Sprachumgebungen mit "$ locale -a" überprüfen, eine Standard-Ubuntu-Installation hat z.B. nur en_US, so dass dies keine praktikable Strategie ist.

22voto

utdemir Punkte 25584

Ich habe es nicht wirklich verstanden, aber ich habe Folgendes verstanden:

Sie wollen 1123000 in 1.123.000 umrechnen. Das können Sie mit format erreichen:

http://docs.python.org/release/3.1.3/whatsnew/3.1.html#pep-378-format-specifier-for-thousands-separator

Beispiel:

>>> format(1123000,',d')
'1,123,000'

0 Stimmen

Die Formulierung in Ihrer Antwort ist etwas verwirrend. Vielleicht könnten Sie sie verbessern?

21voto

jpihl Punkte 7501

Ich erweitere die Antwort hier nur ein wenig :)

Ich musste sowohl ein Tausendstel-Trennzeichen haben als auch die Genauigkeit einer Fließkommazahl begrenzen.

Dies kann durch die Verwendung der folgenden Formatzeichenfolge erreicht werden:

> my_float = 123456789.123456789
> "{:0,.2f}".format(my_float)
'123,456,789.12'

Dies beschreibt die format() -Spezialisierung der Mini-Sprache:

[[fill]align][sign][#][0][width][,][.precision][type]

Quelle: https://www.python.org/dev/peps/pep-0378/#current-version-of-the-mini-language

4 Stimmen

Was wäre, wenn er die folgende Ausgabe erhalten wollte: '123.456.789,12' ?

0 Stimmen

@dot.Py könnte er ein entsprechendes Gebietsschema einstellen locale.setlocale(locale.LC_ALL, 'de_DE.utf-8') dann verwenden Sie ("{:.%dn}" % (math.log10(my_float)+3)).format(my_float) Die Formatzeichenkette "n" ist jedoch das lokalisierte Äquivalent von "g" und nicht von "f", so dass das Präzisionsfeld unübersichtlich wird.

6voto

PythonProgrammi Punkte 20089

Eine Idee

def itanum(x):
    return format(x,',d').replace(",",".")

>>> itanum(1000)
'1.000'

0 Stimmen

Die einfachste und auch für meinen Fall perfekt geeignet! Der Ersatz war auch sehr präzise.

1voto

Eugene Yarmash Punkte 130008

Verwendung von itertools kann Ihnen etwas mehr Flexibilität bieten:

>>> from itertools import zip_longest
>>> num = "1000000"
>>> sep = "."
>>> places = 3
>>> args = [iter(num[::-1])] * places
>>> sep.join("".join(x) for x in zip_longest(*args, fillvalue=""))[::-1]
'1.000.000'

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