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
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.
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)
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'
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)