如何将str转换为float?"545.2222" → 545.2222如何将str转换为int?"31" → 31


相反,请参见在Python中将整数转换为字符串和将浮点转换为字符串而不舍入。

请改为使用“如何将输入读取为数字?”?关闭重复问题,其中OP从用户输入中接收到字符串并立即想要转换它,或者希望输入(在3.x中)自动转换类型。


当前回答

def num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)

其他回答

本地化和逗号

对于引发异常的float(“545545.2222”)等情况,您应该考虑在数字的字符串表示中使用逗号的可能性。相反,使用区域设置中的方法将字符串转换为数字并正确解释逗号。一旦为所需的数字约定设置了区域设置,locale.atof方法将一步转换为浮点。

示例1——美国数字惯例

在美国和英国,逗号可以用作千位分隔符。在这个美式语言环境的示例中,逗号作为分隔符被正确处理:

>>> import locale
>>> a = u'545,545.2222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(a)
545545.2222
>>> int(locale.atof(a))
545545
>>>

示例2——欧洲数字惯例

在世界上大多数国家,逗号用于小数点而不是句点。在这个法语区域设置的示例中,逗号被正确处理为十进制标记:

>>> import locale
>>> b = u'545,2222'
>>> locale.setlocale(locale.LC_ALL, 'fr_FR')
'fr_FR'
>>> locale.atof(b)
545.2222

locale.atoi方法也可用,但参数应为整数。

你需要考虑四舍五入才能做到这一点。

即-int(5.1)=>5int(5.6)=>5——错误,应该是6,所以我们做int(5.6+0.5)=>6

def convert(n):
    try:
        return int(n)
    except ValueError:
        return float(n + 0.5)

Use:

def num(s):
    try:
        for each in s:
            yield int(each)
    except ValueError:
        yield float(each)
a = num(["123.55","345","44"])
print a.next()
print a.next()

这是我所能想到的最具Python风格的方式。

如果您不想使用第三方模块,以下可能是最可靠的解决方案:

def string_to_int_or_float(s):
    try:
        f = float(s) # replace s with str(s) if you are not sure that s is a string
    except ValueError:
        print("Provided string '" + s + "' is not interpretable as a literal number.")
        raise
    try:
        i = int(str(f).rstrip('0').rstrip('.'))
    except:
        return f
    return i

它可能不是最快的,但在许多其他解决方案失败的情况下,它可以正确处理字面数字,例如:

>>> string_to_int_or_float('789.')
789
>>> string_to_int_or_float('789.0')
789
>>> string_to_int_or_float('12.3e2')
1230
>>> string_to_int_or_float('12.3e-2')
0.123
>>> string_to_int_or_float('4560e-1')
456
>>> string_to_int_or_float('4560e-2')
45.6

Use:

>>> str_float = "545.2222"
>>> float(str_float)
545.2222
>>> type(_) # Check its type
<type 'float'>

>>> str_int = "31"
>>> int(str_int)
31
>>> type(_) # Check its type
<type 'int'>