Antworten:
Siehe das Gebietsschemamodul .
Dies führt die Formatierung von Währung (und Datum) durch.
>>> 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'
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
und es hat perfekt funktioniert!
>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'
$ 123,456.78
manchmal aber führen würde. Bearbeiten: Markdown entfernt die zusätzlichen Leerzeichen, tun Sie so, als ob es mehr zwischen dem $ und den Zahlen gibt
Ich bin mir nicht ganz sicher, warum es nicht mehr online (oder in diesem Thread) erwähnt wird, aber das Babel- Paket (und die Django-Dienstprogramme) der Edgewall-Leute eignet sich hervorragend für die Währungsformatierung (und viele andere i18n-Aufgaben). Es ist schön, weil es nicht unter der Notwendigkeit leidet, alles global zu erledigen, wie das Kernmodul des Python-Gebietsschemas.
Das Beispiel, das das OP gegeben hat, wäre einfach:
>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18
locale
Argument format_currency
verwendet werden kann, um dies zu beheben , aber entweder war das vor vier Jahren nicht im Dokument (als ich diesen Kommentar schrieb) oder ich habe den Code dieser Antwort so wie er ist getestet, ohne das Dokument zu überprüfen.
Dies ist ein alter Beitrag, aber ich habe gerade die folgende Lösung implementiert:
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 Originalplakat wechseln Sie natürlich einfach $
für£
print(f'Value is: ${value:,.2f}'.replace('$-', '-$'))
Meine Gebietsschemaeinstellungen schienen unvollständig zu sein, daher musste ich auch über diese SO-Antwort hinausschauen und feststellen:
http://docs.python.org/library/decimal.html#recipes
Betriebssystemunabhängig
Ich wollte nur hier teilen.
def moneyfmt(value, places=2, curr='', sep=',', dp='.', pos='', neg='-', trailneg='')
?
Wenn Sie OSX verwenden und die Einstellung Ihres Gebietsschemamoduls noch nicht festgelegt haben, funktioniert diese erste Antwort nicht. Sie erhalten die 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 verwenden:
locale.setlocale(locale.LC_ALL, 'en_US')
"{: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
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')
format_currency
.
Oh, das ist ein interessantes Tier.
Ich habe viel Zeit damit verbracht, das richtig zu machen. Es gibt drei Hauptprobleme, die sich von Gebietsschema zu Gebietsschema unterscheiden: - Währungssymbol und Richtung - Tausendertrennzeichen - Dezimalpunkt
Ich habe meine eigene ziemlich umfangreiche Implementierung davon 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 für Windows oder andere Unixe sein.
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 Hauptpunkt, den dieser Beitrag gegenüber dem anderen hat, ist, dass er mit älteren Python-Versionen funktioniert. locale.currency wurde in Python 2.5 eingeführt.
10,50 kr
statt kr 10,50
.
# Drucken der Variablen 'Total:' in einem Format, das wie folgt aussieht: '9,348.237'
print ('Total:', '{:7,.3f}'.format(zum1))
Dabei ist '{: 7, .3f}' die Anzahl der Leerzeichen zum Formatieren der Zahl 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, was Sie verwenden möchten.
Inspiriert vom obigen Code: D.
def money_format(value):
value = str(value).split('.')
money = ''
count = 1
for digit in value[0][::-1]:
if count != 3:
money += digit
count += 1
else:
money += f'{digit},'
count = 1
if len(value) == 1:
money = ('$' + money[::-1]).replace('$-','-$')
else:
money = ('$' + money[::-1] + '.' + value[1]).replace('$-','-$')
return money
Ich bin gekommen, um mir das Gleiche anzusehen und habe festgestellt, dass Python-Geld es noch nicht wirklich verwendet 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'
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)
"$2,129.1468284147656"
, "$10,948.3742933"
, "$1,0908"
. Verstümmelt die Schnur.
locale
Verwendung des Währungswerts durch das Modul und die Anzeigeeigenschaften dieser Währung entkoppelt wurden .