Converting Float to Dollars and Cents
Solution 1
In Python 3.x and 2.7, you can simply do this:
>>> '${:,.2f}'.format(1234.5)
'$1,234.50'
The :,
adds a comma as a thousands separator, and the .2f
limits the string to two decimal places (or adds enough zeroes to get to 2 decimal places, as the case may be) at the end.
Solution 2
Building on @JustinBarber's example and noting @eric.frederich's comment, if you want to format negative values like -$1,000.00
rather than $-1,000.00
and don't want to use locale
:
def as_currency(amount):
if amount >= 0:
return '${:,.2f}'.format(amount)
else:
return '-${:,.2f}'.format(-amount)
Solution 3
In python 3, you can use:
import locale
locale.setlocale( locale.LC_ALL, 'English_United States.1252' )
locale.currency( 1234.50, grouping = True )
Output
'$1,234.50'
Solution 4
Personally, I like this much better (which, granted, is just a different way of writing the currently selected "best answer"):
money = float(1234.5)
print('$' + format(money, ',.2f'))
Or, if you REALLY don't like "adding" multiple strings to combine them, you could do this instead:
money = float(1234.5)
print('${0}'.format(format(money, ',.2f')))
I just think both of these styles are a bit easier to read. :-)
(of course, you can still incorporate an If-Else to handle negative values as Eric suggests too)
Comments
-
Evorlor about 4 years
First of all, I have tried this post (among others): Currency formatting in Python. It has no affect on my variable. My best guess is that it is because I am using Python 3 and that was code for Python 2. (Unless I overlooked something, because I am new to Python).
I want to convert a float, such as 1234.5, to a String, such as "$1,234.50". How would I go about doing this?
And just in case, here is my code which compiled, but did not affect my variable:
money = float(1234.5) locale.setlocale(locale.LC_ALL, '') locale.currency(money, grouping=True)
Also unsuccessful:
money = float(1234.5) print(money) #output is 1234.5 '${:,.2f}'.format(money) print(money) #output is 1234.5
-
Evorlor over 10 years'${:,.2f}'.format(money) after money = float(1234.5) has no affect. Did I make a mistake?
-
Justin O Barber over 10 years@Evorlor Yes, that works for me in both Python 3.3 and 2.7. Did you assign money to a variable that you need to print out?
-
Evorlor over 10 yearsyes i did and have confirmed that by printing money before and after
-
Justin O Barber over 10 years@Evorlor can you post the rest of the context of your code? This does really work. See the docs here for more explanation.
-
eric.frederich over 8 yearsThis doesn't work for negative values. '${:,.2f}'.format(-2) returns '$-2.00'. locale.currency(-2, grouping=True) returns '-$2.00'. Just import locale and call locale.setlocale(locale.LC_ALL, '')
-
jyalim almost 8 yearslocale works, but this also works in python3: ` (money<0)*'-' + '${:,.2f}'.format(money)`.
-
NaN over 7 yearsNice... which got me thinking about doing this in a pinch without a def... boolean slicing... "{}${:,.2f}".format(["","-"][amount<0], abs(amount))
-
Sergey Romanovsky over 5 years
locale.setlocale( locale.LC_ALL, 'en_US' )
-
Sergey Romanovsky over 5 years@bparker looks like Windows fails to follow POSIX standard en.wikipedia.org/wiki/Locale_(computer_software) My previous comment was for linux/mac. I'm sorry I forgot to mention this detail.