- 如何将
str
转换为float
?
"545.2222" → 545.2222
如何将 str
转换为 int
?"31" → 31
反向操作,请参见如何将整数转换为字符串(Python)和如何将浮点数转换为不四舍五入的字符串(Python)。
请改用如何将输入读取为数字?来关闭重复提问,其中提问者从用户输入中接收到字符串,并立即希望进行转换,或者希望在3.x版本中使用input
自动转换类型。
str
转换为 float
?"545.2222" → 545.2222
如何将 str
转换为 int
?"31" → 31
反向操作,请参见如何将整数转换为字符串(Python)和如何将浮点数转换为不四舍五入的字符串(Python)。
请改用如何将输入读取为数字?来关闭重复提问,其中提问者从用户输入中接收到字符串,并立即希望进行转换,或者希望在3.x版本中使用input
自动转换类型。
float("545.2222")
and int(float("545.2222"))
YAML解析器可以帮助您确定字符串的数据类型。使用yaml.load()
,然后您可以使用type(result)
来测试类型:
>>> import yaml
>>> a = "545.2222"
>>> result = yaml.load(a)
>>> result
545.22220000000004
>>> type(result)
<type 'float'>
>>> b = "31"
>>> result = yaml.load(b)
>>> result
31
>>> type(result)
<type 'int'>
>>> c = "HI"
>>> result = yaml.load(c)
>>> result
'HI'
>>> type(result)
<type 'str'>
json
或者任何你喜欢的格式):我们都认识到正确的转换并不容易。所以,找到一个被广泛采用的库来为您管理这个问题吧。 :) - Mike Williamson我用这个函数来做那个事情
import ast
def parse_str(s):
try:
return ast.literal_eval(str(s))
except:
return
它将把字符串转换为其类型
value = parse_str('1') # Returns Integer
value = parse_str('1.5') # Returns Float
parse_str(' 1')
(带有空格)将返回None
而不是1
。 - musiphildef get_int_or_float(v):
number_as_float = float(v)
number_as_int = int(number_as_float)
return number_as_int if number_as_float == number_as_int else number_as_float
except
部分什么也不做,为什么要引发异常呢?float()
会自动引发异常。 - Greg0ryint
或float
。它可能会引发解析异常或具有一些意外行为。 - Kuzekojson.loads
:>>> import json
>>> json.loads('123.456')
123.456
>>> type(_)
<class 'float'>
>>>
正如您所看到的,它变成了一种浮点数
类型。
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(5.1)
=> 5
int(5.6)
=> 5 -- 错误的,应该是6,所以我们要做 int(5.6 + 0.5)
=> 6
def convert(n):
try:
return int(n)
except ValueError:
return float(n + 0.5)
int
和float
两种情况。而且当n
是字符串时,会引发异常,这正是OP所期望的。也许你的意思是:当需要一个int
结果时,应该在转换为浮点数之后执行round
。如果函数应该总是返回一个整数,那么你不需要except
部分——整个函数体可以是int(round(float(input)))
。如果函数应该尽可能返回一个整数,否则返回一个浮点数,那么javier的原始解决方案是正确的! - ToolmakerSteve有时候字符串在转换为数字之前需要进行准备和规范化,因此还需要使用正则表达式:
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
要在Python中进行类型转换,使用类型的构造函数,并将字符串(或您尝试转换的任何值)作为参数传递。
例如:
>>>float("23.333")
23.333
__float__
方法,该方法应返回参数的浮点表示。这是特别强大的,因为您可以使用类定义自己的类型,并带有__float__
方法,以便可以使用float(myobject)
将其转换为浮点数。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。
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_to_number
时,我不会期望它返回一个字符串。如果输入无法解析,我会期望它引发异常。 - Neuron
type(my_object)
。结果通常可以作为函数调用来执行转换。例如,type(100)
的结果是int
,因此你可以调用int(my_object)
来尝试将my_object
转换为整数。这种方法并不总是可行的,但在编码时是一个好的“第一推荐”。 - robertlaytonreturn float(str_value)
。 - InfiniteStack