Pythonにおける通貨フォーマット
-
11-07-2019 - |
質問
いの数値をフォーマットするように188518982.18を£188,518,982.18を用います。
する方法を教えてください。
解決
ロケールモジュールを参照してください。
これは通貨(および日付)の書式設定を行います。
>>> 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'
他のヒント
2.7の新機能
>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'
なぜオンラインで(またはこのスレッドで)言及されていないのかはわかりませんが、 Babel パッケージ(とDjangoユーティリティ)は、通貨のフォーマット(および他の多くのi18nタスク)に最適です。コアPythonロケールモジュールのようにすべてをグローバルに実行する必要がないため、これは素晴らしいことです。
OPの例は次のようになります。
>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18
これは古代の投稿ですが、次のソリューションを実装しました。
- 外部モジュールは不要
- 新しい関数を作成する必要はありません
- インラインで実行可能
- 複数の変数を処理する
- 負の金額を処理する
コード:
num1 = 4153.53
num2 = -23159.398598
print 'This: ${:0,.0f} and this: ${:0,.2f}'.format(num1, num2).replace('$-','-
出力:
This: $4,154 and this: -$23,159.40
そして元のポスターについては、明らかに、£
の $
を切り替えるだけです)
出力:
<*>そして元のポスターについては、明らかに、&#163;
$
を切り替えるだけです ロケール設定が不完全であるように思えたので、このSOの答えを超えて見て、次のことを見つけました:
http://docs.python.org/library/decimal.html#recipes
OSに依存しない
ここで共有したいだけです。
OSXを使用しており、ロケールモジュール設定をまだ設定していない場合、この最初の回答が機能しない場合、次のエラーが表示されます。
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.
これを修正するには、以下を使用する必要があります:
locale.setlocale(locale.LC_ALL, 'en_US')
ああ、それは面白い獣です。
正しいことをするのにかなりの時間を費やしましたが、ロケールごとに異なる3つの主な問題があります。 -通貨記号と方向 -千桁区切り -小数点
キウイpythonフレームワークの一部であるこの独自のかなり広範な実装を作成しました。LGPL:edのソースをチェックしてください:
http ://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py?view = markup
コードはわずかにLinux / Glibc固有ですが、Windowsや他のUNIXに採用するのはそれほど難しくないはずです。
インストールしたら、次の操作を実行できます。
>>> from kiwi.datatypes import currency
>>> v = currency('10.5').format()
その後、次のようになります:
'$10.50'
または
'10,50 kr'
現在選択されているロケールに依存。
この投稿が他の記事よりも重要な点は、古いバージョンのpythonで動作することです。 locale.currencyはpython 2.5で導入されました。
私があなたなら、BABELを使用します: http://babel.pocoo .org / en / latest / index.html
from babel.numbers import format_decimal
format_decimal(188518982.18, locale='en_US')
#この「9,348.237」のような形式で変数「Total:」を印刷
print ('Total:', '{:7,.3f}'.format(zum1))
ここで、「{:7、.3f}」は、この場合の数値をフォーマットするためのスペースの数で、3つの小数点を持つ100万です。 次に、 '。format(zum1)を追加します。 zum1は、特定のプログラムのすべての数の合計に対して大きな数を持つ変数です。変数には、使用することを決定した任意のものを指定できます。
私を見て同じものを見つけ python-金 めったに使用すいものについ
converter = lambda amount, currency: "%s%s%s" %(
"-" if amount < 0 else "",
currency,
('{:%d,.2f}'%(len(str(amount))+3)).format(abs(amount)).lstrip())
そして、
>>> converter(123132132.13, "<*>quot;)
'$123,132,132.13'
>>> converter(-123132132.13, "<*>quot;)
'-$123,132,132.13'
シンプルなpythonコード!
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)