Converting Float to Dollars and Cents

126,368

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)

Share:
126,368
Evorlor
Author by

Evorlor

Hello.

Updated on March 16, 2020

Comments

  • Evorlor
    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
    Evorlor over 10 years
    '${:,.2f}'.format(money) after money = float(1234.5) has no affect. Did I make a mistake?
  • Justin O Barber
    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
    Evorlor over 10 years
    yes i did and have confirmed that by printing money before and after
  • Justin O Barber
    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
    eric.frederich over 8 years
    This 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
    jyalim almost 8 years
    locale works, but this also works in python3: ` (money<0)*'-' + '${:,.2f}'.format(money)`.
  • NaN
    NaN over 7 years
    Nice... which got me thinking about doing this in a pinch without a def... boolean slicing... "{}${:,.2f}".format(["","-"][amount<0], abs(amount))
  • Sergey Romanovsky
    Sergey Romanovsky over 5 years
    locale.setlocale( locale.LC_ALL, 'en_US' )
  • Sergey Romanovsky
    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.