2011-12-26 16 views
5

Ho un numero intero che rappresenta un prezzo in centesimi. Usando le stringhe in formato Python, come posso convertire questo valore in dollari con due cifre decimali? Esempi:Come utilizzare la formattazione della stringa Python per convertire un intero che rappresenta i centesimi in un float che rappresenta i dollari?

1234 => 12.34 
5 => 0.05 
999 => 9.99 

MODIFICA: dovrei dare qualche sfondo. Sto memorizzando i prezzi in un database come numeri interi per essere sicuro di non perdere la precisione. Non voglio utilizzare il tipo di dati Decimal perché questi valori verranno utilizzati anche nei calcoli in Javascript, quindi per gli interi sarà più semplice utilizzarlo. Voglio essere in grado di visualizzare in un modello Django il valore formattato usando il tag stringformat. In quanto tale, la divisione del numero per 100 non funziona. C'è un modo per aggiungere il punto decimale senza dividere?

+1

Non utilizzare galleggiante per la valuta. È completamente sbagliato. Decimal funziona perfettamente per le tue esigenze. Può essere convertito in una stringa (per Javascript) e tutti i calcoli finanziari funzionano correttamente con i decimali. –

risposta

12

È dovrebbe cercare di evitare di usare mai i float per rappresentare i soldi (l'imprecisione numerica può essere facilmente insinuata). Il modulo decimale fornisce un tipo di dati utile per rappresentare il denaro in quanto può rappresentare esattamente numeri decimali come 0,05.

Esso può essere utilizzato in questo modo:

import decimal 
cents = 999 
dollars = decimal.Decimal(cents)/100 
print dollars 
5

Utilizzando str.format:

for i in (1234,5,999): 
    print('{:.2f}'.format(i/100.)) 

cede

12.34 
0.05 
9.99 

In python2.6 utilizzare '{0:.2f}' invece di '{:.2f}'.

6

Se non si cura di localizzazione, poi semplicemente dividere per 100 e formattarla:

>>> for cents in [ 1234, 5, 999 ]: 
...  '{0:.02f}'.format(float(cents)/100.0) 
... 
'12.34' 
'0.05' 
'9.99' 

Se si preoccupano di localizzazione, quindi utilizzare il modulo locale:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "") # use the user-default locale 
'en_US.UTF-8' 
>>> for cents in [ 1234, 5, 999 ]: 
...  locale.currency(float(cents)/100.0) 
... 
'$12.34' 
'$0.05' 
'$9.99' 
+0

+1 per includere anche l'esempio l10n. Molto bene. – AgentK

+0

Non sono sicuro che lavorare con 'floats' e valuta sia una buona idea. –