Skip to content Skip to sidebar Skip to footer

Format Numbers As Currency In Python

I learn from Currency formatting in Python, use the locale module to format numbers as currency. For instance, #! /usr/bin/env python # -*- coding: utf-8 -*- import locale value

Solution 1:

babel.numbers

In [22]: from babel.numbers import format_decimal
In [23]:  format_decimal(12345, locale='de_DE')
Out[23]: u'12.345'

In [24]: format_decimal(1.2345, locale='sv_SE')
Out[24]: u'1,234'

Or in your case format_currency:

In [7]: from babel.numbers import format_currency

In [8]: print format_currency(1099.98, 'USD', locale='en_US')
$1,099.98

In [9]: print format_currency(1099.98, 'USD', locale='es_CO')
1.099,98 US$

In [10]: print format_currency(1099.98, 'EUR', locale='de_DE')
1.099,98 €

Solution 2:

For reference (for those that are looking to format numbers similar to how you would format currency), you can use locale.format_string to format numbers

value = 123456789import locale
locale.setlocale(locale.LC_ALL, 'de_DE') 
print(locale.format_string('%.2f', value, True))

Would return

123.456.789,00

Solution 3:

I know of two solutions to this:

Babel

Babel is the best solution because you can choose any currency, regardless of the locale.

The down side is that it's poorly documented. To know all the options, you'll have to read the Babel source code for the function you want to use

Install Babel:

$ pip install Babel

How to use:

import babel.numbers

amount = 123456789.123print(babel.numbers.format_currency(amount, 'EUR', locale='fr_CA'))
# 123 456 789,12 €print(babel.numbers.format_currency(amount, 'EUR', locale='en_CA'))
# €123,456,789.12print(babel.numbers.format_currency(amount, '', locale='en_CA'))
# 123,456,789.12

localize.currency()

One limitation of locale.currency() is that it presumes the currency that matches the locale. For example en_US => $/USD and fr_FR => €/EUR So you may want to use the String.replace() method to replace the currency symbol after if the displayed currency doesn't match the locale.

Based on the locale setting, for example en_US or en_GB, fr_FR or fr_CA, it will know:

  • Which decimal separator to use (eg 100.00 vs 100,00)
  • Which thousands separator to use (eg 1,000 vs 1.000)
  • Which currency symbol to use (eg $100 vs €100 or USD 100 vs EUR 100)
  • Where to place the currency symbol (eg $100 vs 100 $)
import locale

locale.setlocale(locale.LC_ALL, 'fr_FR')

amount = 123456789.123
grouping = True# thousands separator# '123.456.789,12 Eu'
locale.currency(amount, symbol=True, grouping=True, international=False)

# '123.456.789,12 EUR'
locale.currency(amount, symbol=True, grouping=True, international=False)

# '123.456,789'
locale.currency(amount, symbol=False, grouping=True)

# '123456,789'
locale.currency(amount, symbol=False, grouping=True)

The optional arguments are as follows

# which currency symbol to use, and where to place it
symbol=Trueand international=True# => 'USD 100.00'
symbol=Trueand international=False# => '$100.00'
symbol=False# => '100.00'# thousands separator
grouping = True# => '1000.00'
grouping = False# => '1,000.00'

Post a Comment for "Format Numbers As Currency In Python"