Ich möchte eine Zahl wie 188518982.18 mit Python auf £ 188,518,982.18 formatieren.
Wie kann ich das machen?
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'
>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'
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
Dies ist ein alter Beitrag, aber ich habe gerade die folgende Lösung implementiert, die:
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 £
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.
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')
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')
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.
#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.
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
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,.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)