在Python中,我如何解析像这样的数字字符串 "545.2222"
到它对应的浮点值, 542.2222
?或者解析字符串 "31"
到整数, 31
?
我只是想知道如何解析一个 浮动 string
到了 float
和(另外)一个 INT string
到了 int
。
在Python中,我如何解析像这样的数字字符串 "545.2222"
到它对应的浮点值, 542.2222
?或者解析字符串 "31"
到整数, 31
?
我只是想知道如何解析一个 浮动 string
到了 float
和(另外)一个 INT string
到了 int
。
>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545
def num(s):
try:
return int(s)
except ValueError:
return float(s)
def isfloat(value):
try:
float(value)
return True
except:
return False
此功能的更长,更准确的名称可能是: isConvertibleToFloat(value)
val isfloat(val) Note
-------------------- ---------- --------------------------------
"" False Blank string
"127" True Passed string
True True Pure sweet Truth
"True" False Vile contemptible lie
False True So false it becomes true
"123.456" True Decimal
" -127 " True Spaces trimmed
"\t\n12\r\n" True whitespace ignored
"NaN" True Not a number
"NaNanananaBATMAN" False I am Batman
"-iNF" True Negative infinity
"123.E4" True Exponential notation
".1" True mantissa only
"1,234" False Commas gtfo
u'\x30' True Unicode is fine.
"NULL" False Null is not special
0x3fade True Hexadecimal
"6e7777777777777" True Shrunk to infinity
"1.797693e+308" True This is max value
"infinity" True Same as inf
"infinityandBEYOND" False Extra characters wreck it
"12.34.56" False Only one dot allowed
u'四' False Japanese '4' is not a float.
"#56" False Pound sign
"56%" False Percent of what?
"0E0" True Exponential, move dot 0 places
0**0 True 0___0 Exponentiation
"-5e-5" True Raise to a negative number
"+1e1" True Plus is OK with exponent
"+1e1^5" False Fancy exponent not interpreted
"+1e1.3" False No decimals in exponent
"-+1" False Make up your mind
"(1)" False Parenthesis is bad
你认为你知道什么数字?你没有想象的那么好!不是很大的惊喜。
这是另一种值得在此提及的方法, ast.literal_eval:
这可用于安全地评估包含来自不受信任来源的Python表达式的字符串,而无需自己解析值。
也就是说,安全'评估'
>>> import ast
>>> ast.literal_eval("545.2222")
545.2222
>>> ast.literal_eval("31")
31
float(x) if '.' in x else int(x)
对于像这样的情况,您应该考虑数字的字符串表示中逗号的可能性 float("545,545.2222")
这引发了异常。相反,使用方法 locale
将字符串转换为数字并正确解释逗号。该 locale.atof
一旦为所需的数字约定设置了语言环境,方法就会在一步中转换为浮点数。
示例1 - 美国号码惯例
在美国和英国,逗号可以用作千位分隔符。在使用美国语言环境的此示例中,逗号作为分隔符正确处理:
>>> import locale
>>> a = u'545,545.2222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(a)
545545.2222
>>> int(locale.atof(a))
545545
>>>
示例2 - 欧洲数字约定
在里面 世界上大多数国家,逗号用于十进制标记而不是句点。在此示例中使用法语区域设置,逗号可以正确处理为小数点:
>>> import locale
>>> b = u'545,2222'
>>> locale.setlocale(locale.LC_ALL, 'fr_FR')
'fr_FR'
>>> locale.atof(b)
545.2222
方法 locale.atoi
也可用,但参数应该是整数。
用户 codelogic 和 哈雷 是正确的,但请记住,如果你知道字符串是一个整数(例如,545)你可以调用int(“545”)而不首先转换为float。
如果您的字符串在列表中,您也可以使用map函数。
>>> x = ["545.0", "545.6", "999.2"]
>>> map(float, x)
[545.0, 545.60000000000002, 999.20000000000005]
>>>
如果它们都是相同的类型,那就好了。