38

重複の可能性:
カンマを桁区切り記号として使用して数値を出力するには?

例えば:

>> print numberFormat(1234)
>> 1,234

または、これを行うPythonの組み込み関数はありますか?

4

4 に答える 4

102

','これまでのところ、バージョン 2.7 でFormat Specification Mini-Languageに追加された新しいオプションについて言及した人はいません。 PEP 378: Python 2.7 の新機能 ドキュメント の千の区切り記号の書式指定子を参照してください。いじる必要がないので使いやすいです(ただし、そのために国際化には制限があります。元の PEP 378を参照してください)。浮動小数点数、整数、小数、およびミニ言語仕様で提供されている他のすべての書式設定機能で動作します。locale

使用例:

print format(1234, ",d")    # -> 1,234
print "{:,d}".format(1234)  # -> 1,234
print(f'{1234:,d}')         # -> 1,234 (Python 3.6+)

注:この新機能は確かに便利ですが、実際にはモジュールを使用するのはそれほど難しくありません。locale利点は、数値、日付、時刻などを出力するときに、さまざまな国で使用されている適切な千単位 (およびその他) の区切り規則に自動的に従うように数値出力を作成できることです。たくさんの言語や国コードを学ばなくても、コンピュータのデフォルト設定を有効にするのはとても簡単です。あなたがする必要があるのは次のとおりです。

import locale
locale.setlocale(locale.LC_ALL, '')  # empty string for platform's default settings

'n'それを行った後、数値(整数と浮動小数点の両方)を出力するためにジェネリック型コードを使用できます。私がいる場所では、コンマが千の区切り記号として使用されているため、上記のようにロケールを設定すると、次のようになります。

print format(1234, "n")    # -> 1,234
print "{:n}".format(1234)  # -> 1,234

世界の他の多くの国では、この目的のためにカンマの代わりにピリオドを使用しているため、多くの場所でデフォルトのロケールを設定する (または呼び出しでそのような地域のコードを明示的に指定するsetlocale()) と、次のようになります。

print format(1234, "n")    # -> 1.234
print "{:n}".format(1234)  # -> 1.234

'd'または',d'書式指定子に基づく出力は、 の使用 (または使用しない) の影響を受けませんsetlocale()。ただし、代わりにまたは関数を使用すると、'd'指定子影響を受けます。locale.format()locale.format_string()

于 2010-10-11T20:57:05.630 に答える
13

locale.format()

最初にロケールを適切に設定することを忘れないでください。

于 2010-10-11T19:53:11.430 に答える
12

webpy から削除utils.py

def commify(n):
    """
    Add commas to an integer `n`.

        >>> commify(1)
        '1'
        >>> commify(123)
        '123'
        >>> commify(1234)
        '1,234'
        >>> commify(1234567890)
        '1,234,567,890'
        >>> commify(123.0)
        '123.0'
        >>> commify(1234.5)
        '1,234.5'
        >>> commify(1234.56789)
        '1,234.56789'
        >>> commify('%.2f' % 1234.5)
        '1,234.50'
        >>> commify(None)
        >>>

    """
    if n is None: return None
    n = str(n)
    if '.' in n:
        dollars, cents = n.split('.')
    else:
        dollars, cents = n, None

    r = []
    for i, c in enumerate(str(dollars)[::-1]):
        if i and (not (i % 3)):
            r.insert(0, ',')
        r.insert(0, c)
    out = ''.join(r)
    if cents:
        out += '.' + cents
    return out

ここには他の解決策があります。

于 2010-10-11T19:56:55.203 に答える
5

整数で使用locale.format()しますが、環境の現在のロケールに注意してください。一部の環境では、このセットが設定されていないか、コンマファイされた結果が得られないものに設定されている場合があります。

この正確な問題に対処するために私が書かなければならなかったいくつかのコードがあります。プラットフォームに応じて、ロケールが自動的に設定されます。

try:
    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') #use locale.format for commafication
except locale.Error:
    locale.setlocale(locale.LC_ALL, '') #set to default locale (works on windows)

score = locale.format('%d', player['score'], True)
于 2010-10-11T20:17:11.047 に答える