如何将str转换为float?"545.2222" → 545.2222如何将str转换为int?"31" → 31
相反,请参见在Python中将整数转换为字符串和将浮点转换为字符串而不舍入。
请改为使用“如何将输入读取为数字?”?关闭重复问题,其中OP从用户输入中接收到字符串并立即想要转换它,或者希望输入(在3.x中)自动转换类型。
如何将str转换为float?"545.2222" → 545.2222如何将str转换为int?"31" → 31
相反,请参见在Python中将整数转换为字符串和将浮点转换为字符串而不舍入。
请改为使用“如何将输入读取为数字?”?关闭重复问题,其中OP从用户输入中接收到字符串并立即想要转换它,或者希望输入(在3.x中)自动转换类型。
当前回答
这是对你的问题的另一种解释(提示:它很模糊)。你可能正在寻找这样的东西:
def parseIntOrFloat( aString ):
return eval( aString )
它是这样工作的。。。
>>> parseIntOrFloat("545.2222")
545.22220000000004
>>> parseIntOrFloat("545")
545
理论上,存在注入漏洞。例如,字符串可以是“import os;os.art()”。然而,如果没有任何关于字符串来源的背景信息,理论上可能是推测。因为这个问题很模糊,所以根本不清楚这个漏洞是否真的存在。
其他回答
def num(s):
try:
return int(s)
except ValueError:
return float(s)
如果您不反对第三方模块,可以查看fastnumbers模块。它提供了一个名为fast_real的函数,它完全符合这个问题的要求,并且比纯Python实现更快:
>>> from fastnumbers import fast_real
>>> fast_real("545.2222")
545.2222
>>> type(fast_real("545.2222"))
float
>>> fast_real("31")
31
>>> type(fast_real("31"))
int
如果您正在处理混合整数和浮点数,并希望以一致的方式处理混合数据,下面是我使用正确的docstring的解决方案:
def parse_num(candidate):
"""Parse string to number if possible
It work equally well with negative and positive numbers, integers and floats.
Args:
candidate (str): string to convert
Returns:
float | int | None: float or int if possible otherwise None
"""
try:
float_value = float(candidate)
except ValueError:
return None
# Optional part if you prefer int to float when decimal part is 0
if float_value.is_integer():
return int(float_value)
# end of the optional part
return float_value
# Test
candidates = ['34.77', '-13', 'jh', '8990', '76_3234_54']
res_list = list(map(parse_num, candidates))
print('Before:')
print(candidates)
print('After:')
print(res_list)
输出:
Before:
['34.77', '-13', 'jh', '8990', '76_3234_54']
After:
[34.77, -13, None, 8990, 76323454]
要在Python中进行类型转换,请使用该类型的构造函数,将字符串(或您试图转换的任何值)作为参数传递。
例如:
>>>float("23.333")
23.333
在幕后,Python正在调用对象__float__方法,该方法应返回参数的float表示。这特别强大,因为您可以使用__float__方法定义自己的类型(使用类),以便使用float(myobject)将其强制转换为float。
float(x) if '.' in x else int(x)