为啥 isnumeric isdigit 和 isdecimal False 为 1.5?

Posted

技术标签:

【中文标题】为啥 isnumeric isdigit 和 isdecimal False 为 1.5?【英文标题】:why is isnumeric isdigit and isdecimal False for 1.5?为什么 isnumeric isdigit 和 isdecimal False 为 1.5? 【发布时间】:2021-02-21 10:28:32 【问题描述】:
lst = ['a: 12', 'b: 1.5', 'c: 13']

for lines in lst:
    entry = lines.split(":")
    category = entry[0]
    amount = entry[1].strip()
    print(amount.isnumeric())

结果为 True,False,isnumeric、isdigit 和 isdecimal 为 True

最终使用 isinstance(float(amount), float) 来测试这种情况

【问题讨论】:

因为. 不是数字。 因为. 不是数字,不是数字,也不是十进制。 那么对于像 1.5 这样的数字返回 true 的最佳方法是什么? 这取决于您认为“像 1.5 这样的数字”。你会考虑.11. 这样的数字吗? 1E9 呢? infnan 数字一样吗? 【参考方案1】:

如果所有字符都是数字(0-9),则isnumeric() 方法返回True,否则返回False

²¾ 等指数也被视为数值。

-11.5不考虑数值,因为字符串中的所有字符都必须是数字,而 -. 不是。

【讨论】:

【参考方案2】:

来自 Programiz “如果字符串中的所有字符都是数字字符,则 isnumeric() 方法返回 True。如果不是,则返回 False。”

所以,这个点不是数字。

【讨论】:

以上是关于为啥 isnumeric isdigit 和 isdecimal False 为 1.5?的主要内容,如果未能解决你的问题,请参考以下文章

Python3中isdigit(), isdecimal(), isnumeric()的区别和字符串的常用方法

isdigitisnumericisdecimal

为啥 IsNumeric("1.23D45") 返回 True?

为啥在给定文本行中的数字时 IsNumeric() 返回 False

计算十位数以内的数的反数

2018-05-23——PYTHON第三天