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

  • 如何将 a 转换为 ?strfloat
    "545.2222"  →  545.2222
    
  • 如何将 a 转换为 ?strint
    "31"        →  31
    

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


答案 1
>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545

答案 2

用于检查字符串是否为浮点数的 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

你认为你知道什么是数字吗?你并不像你想象的那么好!不大惊喜。

不要在生命攸关型软件上使用此代码!

以这种方式捕获广泛的异常,杀死金丝雀并吞噬异常会产生一个很小的机会,即有效的浮点数作为字符串将返回false。代码行可能由于与字符串内容无关的一千个原因中的任何一个而失败。但是,如果你正在用像Python这样的鸭子打字原型语言编写生命关键型软件,那么你就有更大的问题了。float(...)