2011-03-03 16 views
23

Usare Python v2, ho un valore di esecuzione attraverso il mio programma che mette fuori un numero arrotondato a 2 cifre decimali alla fine:Python Aggiungi Comma Into numero di corda

come questo:

print ("Total cost is: ${:0.2f}".format(TotalAmount)) 

C'è un modo per inserire un valore virgola ogni 3 cifre a sinistra del punto decimale?

Ie: 10000.00 diventa 10.000,00 o 1.000.000,00 diventa 1,000,000.00

Grazie per qualsiasi aiuto.

+7

The Woo: quattro domande in meno di un'ora sullo stesso argomento. Stai finendo un po 'i tuoi compiti. Bravo. – joaquin

risposta

50

In Python 2.7 o superiore, è possibile utilizzare

print ("Total cost is: ${:,.2f}".format(TotalAmount)) 

Questo è documentato in PEP 378.

(dal codice, non posso dire quale versione di Python che si sta utilizzando.)

+0

Scusa, sto usando v2 –

+0

Ma quel codice funziona anche nella versione 2. Grazie. –

+0

Questo è chiaramente compito a casa. Non che io abbia qualche problema con esso ma: 1). In realtà non insegna nulla all'OP. 2). Questo trasforma SO in un rifugio per rispondere alle domande dei compiti a casa. – user225312

4
'{:20,.2f}'.format(TotalAmount) 
14

si potrebbe usare locale.currency se TotalAmount rappresenta il denaro. Funziona su Python 2.7 < troppo:

>>> locale.setlocale(locale.LC_ALL, '') 
'en_US.utf8' 
>>> locale.currency(123456.789, symbol=False, grouping=True) 
'123,456.79' 

Nota: non funziona con la versione locale C così si dovrebbe impostare qualche altro locale prima di chiamare.

2

Questo non è particolarmente elegante, ma dovrebbe funzionare anche:

a = "1000000.00" 
e = list(a.split(".")[0]) 
for i in range(len(e))[::-3][1:]: 
    e.insert(i+1,",") 
result = "".join(e)+"."+a.split(".")[1] 
+1

Bella soluzione per un incarico. – Wok

5

se si utilizza Python 3 o superiore, qui è un modo più semplice per inserire una virgola:

Primo modo

value = -12345672 
print (format (value, ',d')) 

modo o nell'altro

value = -12345672 
print ('{:,}'.format(value)) 
+0

Probabilmente i valori sarebbero float, non interi, quindi sarebbe 'format (valore,", f ")' – mehtunguh

2

Una funzione che lavora in python2.7 python3.1 + o +

def comma(num): 
    '''Add comma to every 3rd digit. Takes int or float and 
    returns string.''' 
    if type(num) == int: 
     return '{:,}'.format(num) 
    elif type(num) == float: 
     return '{:,.2f}'.format(num) # Rounds to 2 decimal places 
    else: 
     print("Need int or float as input to function comma()!") 
0

Le risposte di cui sopra sono molto più bello rispetto al codice che usavo nel mio progetto (non-compiti a casa):

def commaize(number): 
    text = str(number) 
    parts = text.split(".") 
    ret = "" 
    if len(parts) > 1: 
     ret = "." 
     ret += parts[1] # Apparently commas aren't used to the right of the decimal point 
    # The -1 offsets to len() and 0 are because len() is 1 based but text[] is 0 based 
    for i in range(len(parts[0]) - 1,-1,-1): 
     # We can't just check (i % 3) because we're counting from right to left 
     # and i is counting from left to right. We can overcome this by checking 
     # len() - i, although it needs to be adjusted for the off-by-one with a -1 
     # We also make sure we aren't at the far-right (len() - 1) so we don't end 
     # with a comma 
     if (len(parts[0]) - i - 1) % 3 == 0 and i != len(parts[0]) - 1: 
      ret = "," + ret 
     ret = parts[0][i] + ret 
    return ret 
+0

"Le risposte sopra sono molto più belle del codice che stavo usando" - Se le risposte esistenti sono migliori, allora non è necessario pubblicare una risposta di qualità inferiore. Inoltre, questo post ha già una risposta accettata. – avojak

+0

All'epoca pensavo che sarebbe stato utile per i futuri googler in quanto non aveva la versione minima di Python che alcune delle altre risposte avevano. Dopo un'altra recensione delle risposte, vedo che c'è già una. – QBFreak