Formatowanie waluty w Pythonie

Szukam sformatować liczbę jak 188518982.18 do £188,518,982.18 używając Pythona.

Jak mogę to zrobić?

Author: vaultah, 2008-11-26

11 answers

Patrz moduł locale .

To formatowanie waluty (i daty).

>>> 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'
 168
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-20 16:51:01

Nowy w 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

 82
Author: nate c,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-03 05:20:21

Nie do końca wiem, dlaczego nie jest to wspomniane bardziej online (lub w tym wątku), ale pakiet Babel (i narzędzia Django) od chłopaków z Edgewall jest świetny do formatowania walut (i wielu innych zadań i18n). Jest to miłe, ponieważ nie cierpi z powodu potrzeby robienia wszystkiego globalnie, jak rdzeń modułu locale Pythona.

Przykład, który podał OP, to po prostu:

>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18
 35
Author: glenc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-24 03:33:43

Moje ustawienia locale wydawały się niekompletne, więc też zajrzałem poza to więc odpowiedz i znalazłem:

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

OS-niezależny

Po prostu chciałem się tutaj podzielić.

 15
Author: user37986,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-04 16:41:31

To jest starożytny post, ale właśnie zaimplementowałem następujące rozwiązanie:

  • nie wymaga zewnętrznych modułów
  • nie wymaga tworzenia nowej funkcji
  • można wykonać w linii
  • obsługuje wiele zmiennych
  • obsługuje ujemne kwoty w dolarach

Kod:

num1 = 4153.53
num2 = -23159.398598

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

Wyjście:

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

A na oryginalny plakat oczywiście wystarczy zamienić $ na £

 15
Author: elPastor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-12 23:39:23

Jeśli używasz OSX i nie ustawiłeś jeszcze ustawienia modułu locale ta pierwsza odpowiedź nie zadziała otrzymasz następujący błąd:

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.

Aby temu zaradzić, musisz użyć następującego wzoru:

locale.setlocale(locale.LC_ALL, 'en_US')
 8
Author: simoes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-05 17:08:55

Ciekawa bestia.

Spędziłem sporo czasu na poprawieniu tego, istnieją trzy główne problemy, które różnią się od locale do locale: - symbol waluty i kierunek - separator tysięcy - punkt dziesiętny

Napisałem własną dość rozbudowaną implementację tego, która jest częścią frameworka Pythona kiwi, sprawdź LGPL: ed source tutaj:

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

Kod jest nieco specyficzny dla Linuksa / Glibc, ale nie powinien być zbyt trudny do zaadoptowania Dla windows lub innych unixów.

Po zainstalowaniu możesz wykonać następujące czynności:

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

Który następnie daje:

'$10.50'

Lub

'10,50 kr'

W zależności od aktualnie wybranego locale.

Głównym punktem tego postu jest to, że będzie praca ze starszymi wersjami Pythona. miejsce.currency został wprowadzony w Pythonie 2.5.

 3
Author: Johan Dahlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-04 19:27:29

#drukowanie zmiennej 'Total:' w formacie, który wygląda tak: '9,348. 237'

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

Gdzie ' {: 7,.3f} ' es liczba spacji do sformatowania liczby w tym przypadku jest milion z 3 punktami dziesiętnymi. Następnie dodaj'.format(zum1). Zum1 jest zmienną, która ma dużą liczbę dla sumy wszystkich liczb w moim konkretnym programie. Zmienną może być wszystko, co zdecydujesz się użyć.

 1
Author: Marie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-21 17:16:28

Na Twoim miejscu użyłbym BABEL: http://babel.pocoo.org/en/latest/index.html

from babel.numbers import format_decimal


format_decimal(188518982.18, locale='en_US')
 1
Author: Carlos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 22:14:13

Przyjrzałem się temu samemu i znalazłem python-money jeszcze go nie użyłem, ale może mix tych dwóch byłby dobry

 0
Author: James Brooks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-04 12:16:00

Lambda do obliczania go wewnątrz funkcji, z pomocą @ Nate ' s answer

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

I wtedy,

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

>>> converter(-123132132.13, "$")
'-$123,132,132.13'
 0
Author: mu 無,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:10