【问题标题】:Check if string is float expressed as a decimal number only检查字符串是否为浮点数,仅表示为十进制数
【发布时间】:2017-06-14 20:45:36
【问题描述】:

我正在编写脚本来检查一对数字是否是有效坐标。我需要检查数字是否仅以小数表示,经度在 0 到 180 正或负的范围内,纬度在 0 到 90 正或负的范围内。 我使用了 try/except 块来检查数字是否是这样的浮点数:

def isFloat(n):
    try:
       float(n)
       return True
    except ValueError:
       return False

虽然这主要是可行的,但我希望它接受仅以小数表示的浮点数,而不是像 TrueFalse1e1NaN 这样的值

【问题讨论】:

  • 令人惊讶的是,这不是重复的! +1!!

标签: python python-3.x floating-point


【解决方案1】:

你可以使用一个相当简单的regular expression

import re

def isFloat(n):
    n = str(n)  # optional; make sure you have string
    return bool(re.match(r'^-?\d+(\.\d+)?$', n))  # bool is not strictly necessary
    # ^         string beginning
    # -?        an optional -
    # \d+       followed by one or more digits (\d* if you want to allow e.g. '.95')
    # (\.\d+)?  followed by an optional group of a dot and one or more digits
    # $         string end

>>> isFloat('4')
True
>>> isFloat('4.567')
True
>>> isFloat('-4.567')
True
>>> isFloat('-4.')
False
>>> isFloat('-4.45v')
False
>>> isFloat('NaN')
False
>>> isFloat('1e1')
False

【讨论】:

  • 我会将第一个 d+ 更改为 d* 以捕获像 .985 这样的值。此外,虽然我认为这个解决方案最适合发布者的需求,但它确实需要 n 是(转换为)一个字符串。
  • 恐怕我只是个新手,请您解释一下这是如何工作的?
  • @TirthJain 我添加了一些解释,并将链接添加到 pythons regex 模块的文档。至于正则表达式语法的来龙去脉,你应该阅读文档或做一个教程;)
  • @huck_cussler 我在评论中添加了该选项,但我不太喜欢它,因为它会接受空字符串...(不会使表达式进一步复杂化)至于演员表,我拿了从问题的标题中可以看出,n 是一个字符串。
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 2012-09-10
  • 2014-11-14
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
相关资源
最近更新 更多