如何将字符串解析为浮点数或整数?

2719

19
通常情况下,如果你在Python中有一个对象,并且想将其转换为该类型的对象,请对其调用 type(my_object)。结果通常可以作为函数调用来执行转换。例如,type(100) 的结果是 int,因此你可以调用 int(my_object) 来尝试将 my_object 转换为整数。这种方法并不总是可行的,但在编码时是一个好的“第一推荐”。 - robertlayton
还要确保该字符串实际上可以转换为浮点数。做到这一点的一种方法是编写一个带有try/except块的自定义函数,检查try范围内是否包含return float(str_value) - InfiniteStack
33个回答

0

对于数字和字符的组合:

string_for_int = "498 results should get"
string_for_float = "498.45645765 results should get"

首先导入re

 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

-1

使用:

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

-10
这是对你问题的另一种解释(提示:有点模糊)。可能你想要的是这样的东西:
def parseIntOrFloat( aString ):
    return eval( aString )

它的工作原理是这样的...

>>> parseIntOrFloat("545.2222")
545.22220000000004
>>> parseIntOrFloat("545")
545

理论上,存在注入漏洞。例如,字符串可以是"import os; os.abort()"。然而,如果没有关于字符串来源的任何背景信息,这种可能性就只是理论推测。由于问题不明确,因此无法确定是否实际存在此漏洞。

7
即使他的输入是100%安全的,eval()函数的执行速度也比try: int(s) except: float(s)慢3倍以上。 - Cees Timmerman
2
嗯,eval是不好的实践(你应该知道,因为你有310k的声望)。 - U13-Forward
这是最短的一行代码,谁在乎速度... - Friedrich -- Слава Україні

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接