How do I convert a currency string to a floating point number in Python?
If your locale is set properly you can use locale.atof
, but you will still need to strip off the '$' manually:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF8')
'en_US.UTF8'
>>> money = "$6,150,593.22"
>>> locale.atof(money.strip("$"))
6150593.2199999997
Try this:
from re import sub
from decimal import Decimal
money = '$6,150,593.22'
value = Decimal(sub(r'[^\d.]', '', money))
This has some advantages since it uses Decimal
instead of float
(which is better for representing currency) and it also avoids any locale issues by not hard-coding a specific currency symbol.
For a solution without hardcoding the currency position or symbol:
raw_price = "17,30 €"
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF8')
conv = locale.localeconv()
raw_numbers = raw_price.strip(conv['currency_symbol'])
amount = locale.atof(raw_numbers)