2012-11-13 8 views
7

小数点記号としてポイントまたはコンマを使用して10進数を読み上げるように明示的に指示するにはどうすればよいですか?私は私のスクリプトを実行するPCのローカリゼーション設定を知らない、これは私のアプリケーションに影響を与えるべきではありません、私は言いたい:カンマまたはポイントを区切り記号として明示的に使用して、Python文字列を浮動小数点数に変換する

f = read_float_with_point("3.14") 

または

f = read_float_with_comma("3,14") 

は私が書くことを考えます

def read_float_with_comma(num): 
    return float(num.replace(",", ".") 

ロケールの設定がわからないため、安全ではありません。

+0

「1,000」とは何ですか? – katrielalex

+1

@katrielalex:正確には、ロケールによって異なります。 –

答えて

9

私はロケール設定

を知らないので、あなたがlocale moduleを使用してそれを調べることができます:

​​

または

ことを利用し
>>> locale.localeconv()['decimal_point'] 
'.' 

、あなたのコード次のようになります。

import locale 
_locale_radix = locale.localeconv()['decimal_point'] 

def read_float_with_comma(num): 
    if _locale_radix != '.': 
     num = num.replace(_locale_radix, ".") 
    return float(num) 

は良いが、まだ、同じモジュールはあなたのための変換機能を有し、atof()呼ば:

import locale 

def read_float_with_comma(num): 
    return locale.atof(num) 
+0

これはロケール設定を使用しますが、これはおそらくディゴゴブが望むものではありません。現在のロケールと異なるロケールでデータを出力/解析する必要がある場合はどうなりますか?ロケールモジュールは、ライブラリ内のロケールの変更を明示的には控えるので、このメソッドは単純なスクリプトに対してのみ有効です。 – dangonfast

+0

@ jeckyll2hide:単純なスクリプトやデスクトップのGUIプログラム、または複数の(ネットワーク化された)クライアントにサービスする必要のないもの。 –

+0

@ jeckyll2hide:しかしOPは、スクリプトが実行するPCが使用するものを知りたいと思っていたので、これはまさに必要なものでした。これはOPがこの回答を受け入れたとマークした理由です。彼らの問題は解決されました。 –

1

を使用することができますローカル形式の小数:

>>> parse_decimal('1,099.98', locale='en_US') 
Decimal('1099.98') 
>>> parse_decimal('1.099,98', locale='de') 
Decimal('1099.98') 
関連する問題