187

Python を使用して、188518982.18 のような数値を £188,518,982.18 にフォーマットしようとしています。

これどうやってするの?

4

15 に答える 15

252

localeモジュールを参照してください。

これは、通貨 (および日付) の書式設定を行います。

>>> 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'
于 2008-11-26T14:50:59.287 に答える
106

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

于 2010-08-03T05:20:21.993 に答える
56

オンライン (またはこのスレッド) で言及されていない理由はよくわかりませんが、Edgewall 関係者のBabelパッケージ (および Django ユーティリティ) は、通貨の書式設定 (およびその他の多くの i18n タスク) に優れています。コアの Python ロケール モジュールのようにすべてをグローバルに行う必要がないため、これは素晴らしいことです。

OPが示した例は、次のようになります。

>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18
于 2012-01-13T13:17:00.440 に答える
45

これは古い投稿ですが、次のソリューションを実装しました。

  • 外部モジュールを必要としません
  • 新しい関数を作成する必要はありません
  • インラインでできる
  • 複数の変数を処理
  • マイナスの金額を処理

コード:

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

元のポスターの場合は、もちろん$£

于 2017-03-12T21:49:31.907 に答える
16

私のロケール設定は不完全に見えたので、私はこのSOの答えを超えて調べて、次のことを見つけました。

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

OSに依存しない

ここで共有したかっただけです。

于 2009-07-04T16:41:31.043 に答える
9

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')
于 2010-10-05T17:08:55.250 に答える
3

ああ、それは面白い獣です。

私はそれを正しくするためにかなりの時間を費やしました、ロケールごとに異なる3つの主要な問題があります:-通貨記号と方向-千の区切り文字-小数点

私は、kiwi 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はPython2.5で導入されました。

于 2008-11-26T15:06:36.620 に答える
2

#変数「Total:」を「9,348.237」のような形式で出力する

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

ここで、'{:7,.3f}' は数値をフォーマットするためのスペースの数です。この場合、小数点以下 3 桁の 100 万です。次に、「.format(zum1)」を追加します。zum1 は、私の特定のプログラムのすべての数値の合計に大きな数値を持つ変数です。変数は、使用することを決めたものであれば何でもかまいません。

于 2016-11-21T17:16:28.297 に答える
0

私は同じものを見に来ましたが、python-moneyはまだ実際には使用していませんが、2つの組み合わせが良いかもしれません

于 2009-06-04T12:16:00.503 に答える