2016-11-21 8 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 답변에 따라 : 업데이트 617,451,515,

>>> 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 €' 
>>> 

나는 locale.currency() 잘 작동하지만 상호 방법이 작동하지 않습니다 locale.atof() 것을 ashtonished하고있다.

+0

을 모든 점을 제거하고 쉼표로 바꿉니다. 점. non float 문자를 제거하십시오. –

+0

'locale' 모듈을 확인하십시오. https://docs.python.org/3/library/locale.html –

+0

예, 문자열에 대한 Eur (€) 기호를 제거하는 방법을 알고 있습니다. 그러나이 시점에서 문제는 locale.atof()가 통화 기호 문자를 지원하지 않습니다. – 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(",","."))