2016-11-21 11 views
-1

Мне нужно преобразовать строку валюты строку в формате Continental Europe в ряд поплавка:Как конвертировать валюту евро в номер плавающего?

Вход:

'6.150.593,22 €' 

Осознайте, что десятичная точка запятая, и Без_разделителя являются период символов.

Выход:

6150593.22 

Я читал эти вопросы, но они только работает за доллар валюты и локали США:

currency_euros='6.150.593,22 €' float(currency_euros[:-2]) Traceback (most recent call last): File "", line 1, in float(currency_euros[:-2]) ValueError: could not convert string to float: '6.150.593,22'

Обновлено: После ответа @IrmendeJong:

>>> import locale 
>>> locale.setlocale(locale.LC_NUMERIC, "es") 
'es' 
>>> print(locale.currency(6150593.22)) 
6150593,22 € 
>>> money = '6.150.593,22 €' 
>>> locale.atof(money) 
Traceback (most recent call last): 
    File "<pyshell#68>", line 1, in <module> 
    locale.atof(money) 
    File "C:\Python35\lib\locale.py", line 318, in atof 
    return func(delocalize(string)) 
ValueError: could not convert string to float: '6150593.22 €' 
>>> 

Я ashtonished что locale.currency() отлично работает, но его обратный метод locale.atof() не работает.

+0

Просто удалите все точки и замените запятую точка. Сбросьте символы non float –

+0

Проверьте модуль 'locale'. https://docs.python.org/3/library/locale.html –

+0

Да, я знаю, как удалить символ Eur (€) для строки, но в этот момент возникает вопрос, что locale.atof() doesn 't поддерживать символ символа валюты. – Trimax

ответ

3

Использование locale.atofhttps://docs.python.org/3/library/locale.html#locale.atof

>>> import locale 
>>> locale.setlocale(locale.LC_NUMERIC,"nl") 
'nl' 
>>> locale.atof("6.150.593,22") 
6150593.22 
+0

Спасибо, что продемонстрировали мне метод 'locale.atof()', но он не делает работайте с символом Eur (€), в то время как взаимный метод 'locale.currency()', похоже, поддерживает его. Я обновил свой вопрос. – Trimax

+0

'' atof'' предназначен для разбора числа. Любой символ (символы) валюты не являются частью фактического числа. Это зависит от ситуации и применения, как они представлены! Например, в некоторых системах, с которыми я столкнулся, впереди, в конце или '' EUR'' спереди или в конце, разделенных одной или несколькими вкладками и/или пробелами. Я полагаю, что вам нужно отменить символ валюты, чтобы вы только передали фактическую строку номера '' atof''. –

0
value = '6.150.593,22 €' 
value = value.split()[0]    #Take out euro symbol 
integer, decimal = value.split(',') #Separate integer and decimals 
integer = integer.replace('.','')  #Take out dots 
final_value = int(integer) + (int(decimal) * (10**(-len(decimal)))) 
0

Простое решение может быть следующим:

>>> val = '6.150.593,22 €' 
>>> res = val[:-2].split(',') 
>>> float('.'.join([res[0].replace('.', ''), res[1]])) 
6150593.22 
0

Хороший способ сделать это (1 линия):

NewValue = float(value[:-2].replace(".", "").replace(",","."))