web-dev-qa-db-fra.com

Conversion de float en dollars et en cents

Tout d’abord, j’ai essayé ce poste (entre autres): Formatage de la monnaie en Python . Cela n'a aucun effet sur ma variable. Ma meilleure hypothèse est que c’est parce que j’utilise Python 3 et c’était du code pour Python 2. (À moins d’oublier quelque chose, Python).

Je souhaite convertir un float, tel que 1234.5, en une chaîne, telle que "1 234,50 $". Comment pourrais-je m'y prendre?

Et juste au cas où, voici mon code qui a compilé, mais n’affecte pas ma variable:

money = float(1234.5)
locale.setlocale(locale.LC_ALL, '')
locale.currency(money, grouping=True)

Également non réussi:

money = float(1234.5)
print(money) #output is 1234.5
'${:,.2f}'.format(money)
print(money) #output is 1234.5
46
Evorlor

Dans Python 3.x et 2.7, vous pouvez simplement faire ceci:

>>> '${:,.2f}'.format(1234.5)
'$1,234.50'

Le :, ajoute une virgule en tant que séparateur de milliers et le .2f limite la chaîne à deux décimales (ou ajoute suffisamment de zéros pour obtenir 2 décimales, selon le cas) à la fin.

113

En vous appuyant sur l'exemple de @ JustinBarber et en notant le commentaire de @ eric.frederich, si vous souhaitez formater des valeurs négatives telles que -$1,000.00 plutôt que $-1,000.00 et ne veulent pas utiliser locale:

def as_currency(amount):
    if amount >= 0:
        return '${:,.2f}'.format(amount)
    else:
        return '-${:,.2f}'.format(-amount)
11
Alec

Dans python 3, vous pouvez utiliser:

import locale
locale.setlocale( locale.LC_ALL, 'English_United States.1252' )
locale.currency( 1234.50, grouping = True )

Sortie

'$1,234.50'
9
Lewis

Personnellement, j'aime beaucoup mieux cela (ce qui, d'accord, est simplement une manière différente d'écrire la "meilleure réponse" actuellement sélectionnée):

money = float(1234.5)
print('$' + format(money, ',.2f'))

Ou, si vous n'aimez VRAIMENT pas "ajouter" plusieurs chaînes pour les combiner, vous pouvez le faire à la place:

money = float(1234.5)
print('${0}'.format(format(money, ',.2f')))

Je pense juste que ces deux styles sont un peu plus faciles à lire. :-)

(bien sûr, vous pouvez toujours incorporer un If-Else pour gérer les valeurs négatives, comme le suggère Eric)

0
Rich Bayless