2016-11-21 44 views
-1

我需要在欧洲大陆格式的字符串的货币字符串转换成浮点数:如何将欧元货币字符串转换为浮动号码?

输入:

'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

只需删除所有点并用逗号替换逗号一个点。去除非浮点字符 –

+0

查看'locale'模块。 https://docs.python.org/3/library/locale.html –

+0

是的,我知道如何消除字符串的Eur(€)符号,但此时,问题在于locale.atof()doesn不支持货币符号字符。 – 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()'方法,但它不会不能使用de Eur(€)符号,而locale.currency()这个倒数方法似乎支持它。我更新了我的问题。 – Trimax

+0

''atof''用于解析一个数字。任何货币符号不是实际数量的一部分。这取决于情况和应用程序如何表示!例如,在某些系统中,我在前面或末尾遇到欧元,或在前面或末尾遇到“欧元”,被一个或多个标签和/或空格隔开。这取决于你我想剥离货币符号,所以你只能将实际的数字字符串传递给'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(",",".")) 
相关问题