float 또는 int로 문자열을 구문 분석합니까?


질문

 

  • How can I convert a str to float?
    "545.2222"  →  545.2222
    
  • How can I convert a str to int?
    "31"        →  31
    

답변

 

>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545


답변

String이 float인지 확인하는 Python 메서드 :

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

이 함수의 더 길고 정확한 이름은 다음과 같을 수 있습니다 : is_convertible_to_float (값)

무엇이 뭐야, 파이썬에서 부유물이 아닌 것은 당신을 놀라게 할 수 있습니다 :

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

숫자가 숫자인지 알고 있다고 생각하십니까?당신은 당신이 생각하는 것처럼 당신은 그렇게 좋지 않습니다!큰 놀라움이 아닙니다.

삶의 중요한 소프트웨어 에이 코드를 사용하지 마십시오!

이 방법으로 광범위한 예외를 잡고 카나우스를 죽이고 예외를 얻는 것은 유효한 float가 false로 반환되는 작은 기회를 만듭니다.코드의 float (...) 행은 문자열의 내용과 아무 관련이없는 수천 가지 이유 중 하나에 대해 실패 할 수 있습니다.그러나 파이썬과 같은 오리 타이핑 프로토 타입 언어에 생명의 중요한 소프트웨어를 쓰는 경우 훨씬 더 큰 문제가 있습니다.



답변

def num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)


답변

이것은 여기에 언급 될 가치가있는 또 다른 방법입니다. ast.literal_eval :

이는 값을 구문 분석 할 필요없이 신뢰할 수없는 소스에서 파이썬 표현을 포함하는 문자열을 안전하게 평가하는 데 사용할 수 있습니다.

즉, 안전한 'eval'

>>> import ast
>>> ast.literal_eval("545.2222")
545.2222
>>> ast.literal_eval("31")
31


답변

현지화 및 쉼표

예외를 던지는 float ( "545,545.2222")와 같은 경우 숫자의 문자열 표현에 쉼표의 가능성을 고려해야합니다.대신 로케일의 메소드를 사용하여 문자열을 숫자로 변환하고 쉼표를 올바르게 해석합니다.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 - 유럽 번호 협약

세계의 대다수에서는 쉼표가 기간 대신 소수점에 사용됩니다.이 예에서 프랑스어 로켈을 사용하면 쉼표가 10 진수로 올바르게 처리됩니다.

>>> import locale
>>> b = u'545,2222'
>>> locale.setlocale(locale.LC_ALL, 'fr_FR')
'fr_FR'
>>> locale.atof(b)
545.2222

locale.atoi 메소드도 사용할 수 있지만 인수는 정수 여야합니다.



답변

float(x) if '.' in x else int(x)
출처:https://stackoverflow.com/questions/379906/how-do-i-parse-a-string-to-a-float-or-int