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


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

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


当前回答

a = int(float(a)) if int(float(a)) == float(a) else float(a)

其他回答

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

即-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 string_to_number(str):
  if("." in str):
    try:
      res = float(str)
    except:
      res = str
  elif(str.isdigit()):
    res = int(str)
  else:
    res = str
  return(res)

它将根据传递的内容返回int、float或string。

int字符串

print(type(string_to_number("124")))
<class 'int'>

浮点数字符串

print(type(string_to_number("12.4")))
<class 'float'>

字符串

print(type(string_to_number("hello")))
<class 'str'>

看起来像浮点数的字符串

print(type(string_to_number("hel.lo")))
<class 'str'>

对于数字和字符:

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]
>>>

只有当它们都是同一类型的时候才是好的。

a = int(float(a)) if int(float(a)) == float(a) else float(a)