如何检查一个字符串是否表示一个浮点数

7

我正在使用这个方法来检查一个变量是否为数字,同时我也想检查它是否为浮点数。

if(width.isnumeric() == 1)

1
你想让 33.5 放在同一个检查中吗? - zondo
1
可能是检查一个数字是整数还是浮点数的重复问题。 - LinkBerest
3
width.isnumeric()是一个暗示width是一个字符串。他并不是在检查一个真实的数字是否为浮点数;他是在检查一个字符串是否可以转换为浮点数。 - zondo
你的问题并不明确 --- 请注意所有试图猜测你的输入(和输入类型)、你需要什么输出以及你打算如何处理边缘案例的评论。 这些都是你应该告诉我们的事情,而不是我们去猜测的。 你到底想做什么,为什么? 你期望什么样的输入? 你想从这些输入中得到什么输出? 你所说的“浮点数”是什么意思? 1.0float 类型,但它具有整数值(与 fractions.Fraction(10,5) 一样) --- 对于你的目的来说,它们是否属于“浮点数”? - Kevin J. Chase
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Kevin J. Chase
显示剩余4条评论
3个回答

17

最简单的方法是使用float()将字符串转换为浮点数:

>>> float('42.666')
42.666

如果无法转换为浮点数,则会出现ValueError

>>> float('Not a float')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'Not a float'

使用 try/except 语句块通常被认为是处理此类问题的最佳方式:

try:
  width = float(width)
except ValueError:
  print('Width is not a number')

请注意,您还可以在float()上使用is_integer()来检查它是否为整数:

>>> float('42.666').is_integer()
False
>>> float('42').is_integer()
True

在代码中添加一个try/except块...但是我个人认为这是最正确的答案 :) - Joran Beasley
1
使用 is_integer() 来区分整数和浮点数是一个不错的方法。 - mhawke

7
def is_float(string):
  try:
    return float(string) and '.' in string  # True if string is a number contains a dot
  except ValueError:  # String is not a number
    return False

输出:

>> is_float('string')
>> False
>> is_float('2')
>> False
>> is_float('2.0')
>> True
>> is_float('2.5')
>> True

不是很好,参见https://dev59.com/wXRC5IYBdhLWcg3wMeDf - Jeremy S.

0
这里有另一种解决方案,不使用"try",并直接返回一个真值。感谢@Cam Jackson。我在这里找到了这个解决方案:Using isdigit for floats? 思路是在使用isdigit()之前,精确地移除一个小数点:
>>> "124".replace(".", "", 1).isdigit()
True
>>> "12.4".replace(".", "", 1).isdigit()
True
>>> "12..4".replace(".", "", 1).isdigit()
False
>>> "192.168.1.1".replace(".", "", 1).isdigit()
False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接