2012-05-20 9 views
10

Wie würde ich einen Schwimmer in seine ‚Buchführung Form‘ umwandeln -Convert Schwimmer durch Komma getrennte Zeichenfolge

100028282.23 --> 100,028,282.23 
100028282 --> 100,028,282.00 

Gibt es eine Python-Methode, die dies tut?

+6

Speicher von Geldbeträgen als Schwimmer nicht so gut in erster Linie sein könnte. – NPE

Antwort

14

können Sie verwenden, um die locale.format() Funktion, dies zu tun:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, 'en_US.utf8') 
'en_US.utf8' 
>>> locale.format("%.2f", 100028282.23, grouping=True) 
'100,028,282.23' 

Beachten Sie, dass die Präzision geben: %.2f

Alternativ können Sie die locale.currency() Funktion verwenden, die die LC_MONETARY Einstellungen folgen:

>>> locale.currency(100028282.23) 
'$100028282.23' 
+0

Super, danke! – David542

18

Als Alternative zu beerbajay 's hervorragende Antwort äh, einfache String Formatierung Arbeiten in 2.7+, ohne einen Import erforderlich:

>>> '{0:,.2f}'.format(24322.34) 
'24,322.34' 
3

Für monetäre Anwendungen, die dezimal Modul ist eine gute Wahl für Gleitpunktarithmetik. Um mit Komma dezimal Schwimmern anzuzeigen, finden Sie in das moneyfmt Rezept:

def moneyfmt(value, places=2, curr='', sep=',', dp='.', 
      pos='', neg='-', trailneg=''): 
    """Convert Decimal to a money formatted string. 

    places: required number of places after the decimal point 
    curr: optional currency symbol before the sign (may be blank) 
    sep:  optional grouping separator (comma, period, space, or blank) 
    dp:  decimal point indicator (comma or period) 
      only specify as blank when places is zero 
    pos:  optional sign for positive numbers: '+', space or blank 
    neg:  optional sign for negative numbers: '-', '(', space or blank 
    trailneg:optional trailing minus indicator: '-', ')', space or blank 

    >>> d = Decimal('-1234567.8901') 
    >>> moneyfmt(d, curr='$') 
    '-$1,234,567.89' 
    >>> moneyfmt(d, places=0, sep='.', dp='', neg='', trailneg='-') 
    '1.234.568-' 
    >>> moneyfmt(d, curr='$', neg='(', trailneg=')') 
    '($1,234,567.89)' 
    >>> moneyfmt(Decimal(123456789), sep=' ') 
    '123 456 789.00' 
    >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>') 
    '<0.02>' 

    """ 
    q = Decimal(10) ** -places  # 2 places --> '0.01' 
    sign, digits, exp = value.quantize(q).as_tuple() 
    result = [] 
    digits = map(str, digits) 
    build, next = result.append, digits.pop 
    if sign: 
     build(trailneg) 
    for i in range(places): 
     build(next() if digits else '0') 
    build(dp) 
    if not digits: 
     build('0') 
    i = 0 
    while digits: 
     build(next()) 
     i += 1 
     if i == 3 and digits: 
      i = 0 
      build(sep) 
    build(curr) 
    build(neg if sign else pos) 
    return ''.join(reversed(result)) 
Verwandte Themen