如何将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中)自动转换类型。
当前回答
你需要考虑四舍五入才能做到这一点。
即-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)
其他回答
这是对你的问题的另一种解释(提示:它很模糊)。你可能正在寻找这样的东西:
def parseIntOrFloat( aString ):
return eval( aString )
它是这样工作的。。。
>>> parseIntOrFloat("545.2222")
545.22220000000004
>>> parseIntOrFloat("545")
545
理论上,存在注入漏洞。例如,字符串可以是“import os;os.art()”。然而,如果没有任何关于字符串来源的背景信息,理论上可能是推测。因为这个问题很模糊,所以根本不清楚这个漏洞是否真的存在。
a = int(float(a)) if int(float(a)) == float(a) else float(a)
def num(s):
"""num(s)
num(3),num(3.7)-->3
num('3')-->3, num('3.7')-->3.7
num('3,700')-->ValueError
num('3a'),num('a3'),-->ValueError
num('3e4') --> 30000.0
"""
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
raise ValueError('argument is not a string of number')
通过使用int和float方法,我们可以将字符串转换为整数和浮点数。
s="45.8"
print(float(s))
y='67'
print(int(y))
还有正则表达式,因为有时字符串在转换为数字之前必须准备好并规范化:
import re
def parseNumber(value, as_int=False):
try:
number = float(re.sub('[^.\-\d]', '', value))
if as_int:
return int(number + 0.5)
else:
return number
except ValueError:
return float('nan') # or None if you wish
用法:
parseNumber('13,345')
> 13345.0
parseNumber('- 123 000')
> -123000.0
parseNumber('99999\n')
> 99999.0
顺便说一句,有些东西可以验证你有一个号码:
import numbers
def is_number(value):
return isinstance(value, numbers.Number)
# Will work with int, float, long, Decimal