如何将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中)自动转换类型。
当前回答
要在Python中进行类型转换,请使用该类型的构造函数,将字符串(或您试图转换的任何值)作为参数传递。
例如:
>>>float("23.333")
23.333
在幕后,Python正在调用对象__float__方法,该方法应返回参数的float表示。这特别强大,因为您可以使用__float__方法定义自己的类型(使用类),以便使用float(myobject)将其强制转换为float。
其他回答
如果您不想使用第三方模块,以下可能是最可靠的解决方案:
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
float(x) if '.' in x else int(x)
对于数字和字符:
string_for_int = "498 results should get"
string_for_float = "498.45645765 results should get"
首次导入重新:
import re
# For getting the integer part:
print(int(re.search(r'\d+', string_for_int).group())) #498
# For getting the float part:
print(float(re.search(r'\d+\.\d+', string_for_float).group())) #498.45645765
对于简单的模型:
value1 = "10"
value2 = "10.2"
print(int(value1)) # 10
print(float(value2)) # 10.2
用户codelogic和harley是正确的,但请记住,如果您知道字符串是整数(例如545),则可以调用int(“545”),而无需先强制转换为float。
如果字符串在列表中,也可以使用map函数。
>>> x = ["545.0", "545.6", "999.2"]
>>> map(float, x)
[545.0, 545.60000000000002, 999.20000000000005]
>>>
只有当它们都是同一类型的时候才是好的。
这是对你的问题的另一种解释(提示:它很模糊)。你可能正在寻找这样的东西:
def parseIntOrFloat( aString ):
return eval( aString )
它是这样工作的。。。
>>> parseIntOrFloat("545.2222")
545.22220000000004
>>> parseIntOrFloat("545")
545
理论上,存在注入漏洞。例如,字符串可以是“import os;os.art()”。然而,如果没有任何关于字符串来源的背景信息,理论上可能是推测。因为这个问题很模糊,所以根本不清楚这个漏洞是否真的存在。