In Python 3.5
, I\'d like to convert a German number string to a float using locale.atof
with the following code:
import local
Just for future reference - this is what I ended up using:
import locale
from locale import atof
def convert(string, thousands_delim = '.', abbr = 'de_DE.UTF-8'):
''' Converts a string to float '''
locale.setlocale(locale.LC_ALL, abbr)
try:
number = atof("".join(string.split(thousands_delim)))
except ValueError:
number = None
return number
number = convert('17.907,08')
print(number)
# 17907.08
... or for English numbers:
number = convert('1,000,000', abbr = 'en_US')
print(number)
# 1000000.0
You can't have more than one dot (.
) or comma (,
) in your number since both of these symbols are used by atof()
to separate the decimal part of your number from its integer part.
Since the dots are not needed for Python to correctly represent your number, you should remove them and only keep the comma:
import locale
from locale import atof
locale.setlocale(locale.LC_ALL, 'de_DE')
string_nb = '17.907,08'
string_nb = string_nb.replace('.', '')
number = atof(string)