2016-11-21 11 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 €' 
>>> 

を私はlocale.currency()が正常に動作しますが、動作しませんlocale.atof()その逆数方法ことashtonishedよ。

+0

単にすべての点を削除し、カンマを点。 flood以外の文字を取り除く –

+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''は数値を解析するためのものです。すべての通貨記号は実際の番号の一部ではありません。状況とアプリケーションによって表現方法は異なります。例えば、いくつかのシステムでは、前または後ろに1つ以上のタブおよび/またはスペースで区切られた、前または後ろの '' 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(",",".")) 
関連する問題