it-swarm.com.de

Währungsformatierung in Python

Ich möchte eine Zahl wie 188518982.18 mit Python auf £ 188,518,982.18 formatieren.

Wie kann ich das machen?

136
RailsSon

Siehe das locale Modul.

Dadurch werden Währung (und Datum) formatiert.

>>> import locale
>>> locale.setlocale( locale.LC_ALL, '' )
'English_United States.1252'
>>> locale.currency( 188518982.18 )
'$188518982.18'
>>> locale.currency( 188518982.18, grouping=True )
'$188,518,982.18'
183
S.Lott

Neu in 2.7

>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'

http://docs.python.org/dev/whatsnew/2.7.html#pep-0378

88
nate c

Nicht ganz sicher, warum es nicht mehr online (oder in diesem Thread) erwähnt wird, aber das Babel -Paket (und Django -Dienstprogramme) von den Edgewall-Jungs ist für die Währungsformatierung großartig (und viele andere i18n-Aufgaben.) Es ist nett, weil es nicht unter der Notwendigkeit leidet, alles global zu erledigen, wie das core Python locale-Modul).

Das Beispiel, das das OP gab, wäre einfach:

>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18
40
glenc

Dies ist ein alter Beitrag, aber ich habe gerade die folgende Lösung implementiert, die:

  • Benötigt keine externen Module
  • Es ist nicht erforderlich, eine neue Funktion zu erstellen
  • Kann inline erfolgen
  • Behandelt mehrere Variablen
  • Behandelt negative Dollarbeträge

Code:

num1 = 4153.53
num2 = -23159.398598

print 'This: ${:0,.0f} and this: ${:0,.2f}'.format(num1, num2).replace('$-','-$')

Ausgabe:

This: $4,154 and this: -$23,159.40

Und für das Originalposter schalten Sie einfach $ zum £

23
elPastor

Meine Gebietsschemaeinstellungen schienen unvollständig zu sein, daher musste ich auch über diese SO Antwort hinausschauen und fand:

http://docs.python.org/library/decimal.html#recipes

Betriebssystemunabhängig

Ich wollte nur hier teilen.

16
user37986

Wenn Sie OSX verwenden und noch keine Einstellung für Ihr Gebietsschemamodul vorgenommen haben, funktioniert diese erste Antwort nicht. Sie erhalten folgende Fehlermeldung:

Traceback (most recent call last):File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 221, in currency
raise ValueError("Currency formatting is not possible using "ValueError: Currency formatting is not possible using the 'C' locale.

Um dies zu beheben, müssen Sie Folgendes tun:

locale.setlocale(locale.LC_ALL, 'en_US')
9
simoes

Wenn ich Sie wäre, würde ich BABEL verwenden: http://babel.pocoo.org/en/latest/index.html

from babel.numbers import format_decimal


format_decimal(188518982.18, locale='en_US')
3
Carlos

Oh, das ist ein interessantes Biest.

Ich habe viel Zeit darauf verwendet, dies zu korrigieren. Es gibt drei Hauptprobleme, die von Gebietsschema zu Gebietsschema unterschiedlich sind: - Währungssymbol und -richtung - Tausendertrennzeichen - Dezimalpunkt

Ich habe meine eigene ziemlich umfangreiche Implementierung geschrieben, die Teil des kiwi python frameworks ist. Schauen Sie sich die LGPL: ed-Quelle hier an:

http://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py?view=markup

Der Code ist leicht Linux/Glibc-spezifisch, sollte aber nicht zu schwierig sein, ihn an Windows oder andere Unixe anzupassen.

Sobald Sie das installiert haben, können Sie Folgendes tun:

>>> from kiwi.datatypes import currency
>>> v = currency('10.5').format()

Welches wird Ihnen dann geben:

'$10.50'

oder

'10,50 kr'

Abhängig vom aktuell ausgewählten Gebietsschema.

Der wichtigste Punkt, den dieser Beitrag gegenüber dem anderen hat, ist, dass er mit älteren Versionen von Python funktioniert. locale.currency wurde in python 2.5 eingeführt.

3
Johan Dahlin

#Drucken der Variablen 'Total:' in einem Format, das wie folgt aussieht: '9.348.237'

print ('Total:',   '{:7,.3f}'.format(zum1))

wobei das '{: 7, .3f}' die Anzahl der Leerzeichen für die Formatierung ist, ist in diesem Fall eine Million mit 3 Dezimalstellen. Dann fügen Sie das '.format (zum1) hinzu. Das zum1 ist die Variable, die die große Zahl für die Summe aller Zahlen in meinem speziellen Programm hat. Variable kann alles sein, für das Sie sich entscheiden.

1
Marie

Ich bin gekommen, um mir dasselbe anzuschauen und habe festgestellt, dass Python-Geld es noch nicht wirklich benutzt hat, aber vielleicht wäre eine Mischung aus beiden gut

0
James Brooks

Ein Lambda zur Berechnung innerhalb einer Funktion mit Hilfe von @Nates Antwort

converter = lambda amount, currency: "%s%s%s" %(
    "-" if amount < 0 else "", 
    currency, 
    ('{:%d,.2f}'%(len(str(amount))+3)).format(abs(amount)).lstrip())

und dann,

>>> converter(123132132.13, "$")
'$123,132,132.13'

>>> converter(-123132132.13, "$")
'-$123,132,132.13'
0
mu 無

"{:0,.2f}".format(float(your_numeric_value)) in Python 3 erledigt den Job; es gibt so etwas wie eine der folgenden Zeilen aus:

10,938.29
10,899.00
10,898.99
2,328.99

Einfacher python Code!

def format_us_currency(value):
    value=str(value)
    if value.count(',')==0:
        b,n,v='',1,value
        value=value[:value.rfind('.')]
        for i in value[::-1]:
            b=','+i+b if n==3 else i+b
            n=1 if n==3 else n+1
        b=b[1:] if b[0]==',' else b
        value=b+v[v.rfind('.'):]
    return '$'+(value.rstrip('0').rstrip('.') if '.' in value else value)
0
Vanjith