2017-04-26 15 views
-5

私の値がポイントまたはコンマで浮動小数点であるかどうかをチェックしたいが、isdigit()はポイントでfalseを返す。なぜ、どのようにそれを通過するのか知りたいです。なぜfloatでisdigit()がfalseを返すのですか?

> value = "0.0" 
> print value.isdigit(): 
>>> False 

私のコードです:文字列内のすべての文字が数字ある場合

if "." in value and value.isdigit() 
    print "ok" 
+7

。 'isdigit()'は** **数字のみを含む文字列に対してtrueを返します。 –

+0

これは、いずれかの点が真であることはできません。 –

+0

でも "0.0"は浮動小数点なので、私にとってはそれも数字か違いは違いますか? –

答えて

4

str.isdigit()にのみtrueを返します。 .は数字ではなく句読点です。 Pythonの3 str.isdigit() documentationから

正式には、数字のみstrオブジェクト用のPython 2のプロパティ値Numeric_Type =桁またはNumeric_Type =進

を(持つ文字でありますASCII桁(09)が考慮されますが、unicodeオブジェクトの場合は同じ定義が適用されます)。

official Numeric Property definitions specificationを参照してください。その説明に一致する708 Unicode codepointsがあります。一般的なUnicodeのカテゴリにこれを簡素化

、ユニコードの数値のタイプはNで始まるカテゴリを持っていますが、.ない:ここ句読点ため

>>> import unicodedata 
>>> unicodedata.category(u'.') 
'Po' 

Pスタンド、ためoが。 だから、添字ゼロは限りfloat()に関しては、実際に0ではありません

>>> unicodedata.name(u'\u2080') 
'SUBSCRIPT ZERO' 
>>> unicodedata.category(u'\u2080') 
'No' 
>>> unicodedata.digit(u'\u2080') 
0 
>>> u'\u2080'.isdigit() 
True 
>>> float(u'\u2080') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'decimal' codec can't encode character u'\u2080' in position 0: invalid decimal Unicode string 

、それ:

その逆、数字のみを含む文字列は、どちらか常にフロートや数に変換されませんの数字です。

あなたは文字列が有効な浮動小数点数であれば、テストfloatを使用してValueErrorをキャッチしたい場合: `.`は数字ではありませんので

def is_float(string): 
    try: 
     float(string) 
     return True 
    except ValueError: 
     return False 
+0

はい、常にブロックを除いてそれぞれの例外を捕捉するために例外名を使用してください。 +1 –

関連する問題