为什么isdigit()在float上返回false?

Q.D*_*son -4 python floating-point digit python-2.7

我想检查我的值是否是带有点或逗号的浮点数,但是isdigit()返回带有点的false.我想知道为什么以及如何通过它.

> value = "0.0"
> print value.isdigit():
>>> False
Run Code Online (Sandbox Code Playgroud)

我的代码是:

if "." in value and value.isdigit()
    print "ok"
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

str.isdigit()只有当字符串中的所有字符都是数字时才会返回true ..是标点符号,而不是数字.

从Python 3 str.isdigit()文档:

形式上,数字是具有属性值Numeric_Type = Digit或Numeric_Type = Decimal的字符

(对于Python 2,对于str对象,仅考虑ASCII数字(0至to 9),但对于unicode对象,应用相同的定义).

请参阅官方数字属性定义规范 ; 有708个Unicode代码点与该描述相匹配.

将此简化为一般unicode类别,Unicode中的数字类型具有以N(但.不是)开头的类别:

>>> import unicodedata
>>> unicodedata.category(u'.')
'Po'
Run Code Online (Sandbox Code Playgroud)

P代表标点符号这里,o其他.

反之亦然,只包含数字的字符串并不总是可以转换为浮点数或数字:

>>> 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
Run Code Online (Sandbox Code Playgroud)

因此,就所float()涉及的而言,下标零并非真正为0 ,但它一个数字.

如果要测试字符串是否为有效的浮点数,请使用float并捕获ValueError:

def is_float(string):
    try:
        float(string)
        return True
    except ValueError:
        return False
Run Code Online (Sandbox Code Playgroud)