Python中等值数和等值数之间的区别

rns*_*nso 3 python string numeric decimal

字符串的isnumeric和isdecimal函数之间有什么区别(https://www.tutorialspoint.com/python3/python_strings.htm)?他们似乎给出了相同的结果:

>>> "123456".isnumeric()
True
>>> "123456".isdecimal()
True
>>> "123.456".isnumeric()
False
>>> "123.456".isdecimal()
False
>>> "abcd".isnumeric()
False
>>> "abcd".isdecimal()
False
Run Code Online (Sandbox Code Playgroud)

我希望isdecimal()为“ 123.456”返回true,但事实并非如此。

Mar*_*ers 5

这两种方法测试特定的Unicode字符类。如果字符串中的所有字符都来自指定的字符类(具有特定的Unicode属性),则测试为true。

isdecimal()不测试字符串是否为十进制数字。请参阅文档

如果字符串中的所有字符均为十进制字符并且至少包含一个字符,则返回true,否则返回false。小数字符是可用于以10为基数的数字,例如U + 0660,ARABIC-INDIC DIGIT ZERO。十进制字符形式上是Unicode通用类别“ Nd”中的字符。

.周期字符不是成员Nd类; 它不是十进制字符。

str.isdecimal()字符是的子集str.isnumeric(); 这将测试所有数字字符。同样,从文档中

如果字符串中的所有字符均为数字字符,并且至少包含一个字符,则返回true,否则返回false。数字字符包括数字字符,以及所有具有Unicode数值属性的字符,例如U + 2155,VULGAR FRACTION IF FTHTH。形式上,数字字符是具有属性值Numeric_Type =数字,Numeric_Type =十进制或Numeric_Type =数字的字符。

NdNumeric_Type=Digit这里。

如果要测试字符串是否为有效的十进制数字,请尝试将其转换为浮点数:

def is_valid_decimal(s):
    try:
        float(s)
    except ValueError:
        return False
    else:
        return True
Run Code Online (Sandbox Code Playgroud)

  • 我认为 API 文档应该警告这一点,至于“普通人”-1 与 1 或 +1 一样数字,尤其是当有很多“奇怪”字符被接受为数字时(如 ¼ 等)。 (2认同)