float 또는 int로 문자열을 구문 분석합니까?
질문
- How can I convert a
str
tofloat
?"545.2222" → 545.2222
- How can I convert a
str
toint
?"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
최근댓글