协慌网

登录 贡献 社区

如何在 Python 中将字符串解析为 float 或 int?

在 Python 中,如何将像"545.2222"这样的数字字符串解析为相应的浮点值542.2222 ?或者将字符串"31"解析为整数, 31

我只是想知道如何解析浮动 stringfloat ,和(分别)一个int stringint

答案

>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545
def num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)

用于检查字符串是否为 float 的 Python 方法:

def is_float(value):
  try:
    float(value)
    return True
  except:
    return False

此函数的更长且更准确的名称可以是: is_convertible_to_float(value)

什么是,而不是Python 中的浮点数可能会让你感到惊讶:

val                   is_float(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

你认为你知道什么数字?你没有想象的那么好!不是很大的惊喜。