2009-07-07 7 views
41

파이썬에서 'nn.nnnnn'형식의 문자열이 있습니다. 정수로 변환하고 싶습니다.문자열을 파이썬에서 십진수로 정수로 변환

직접 변환이 실패

>>> s = '23.45678' 
>>> i = int(s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '23.45678' 

내가 사용하여 진수로 변환 할 수 있습니다 : '.'

>>> from decimal import * 
>>> d = Decimal(s) 
>>> print d 
23.45678 

나는 또한에 분할 수, 다음 추가 한 후, 0에서 소수점을 빼기 그 번호로 ... 멍청이.

하지만 불필요한 유형 변환이나 기동없이 int로 사용하는 것을 선호합니다.

+10

매트, 23.45678은 정수가 아닙니다. 파이썬에서 문자열을 정수로 변환하려면 정수로 지정해야합니다. 논쟁은 "옳은"일이 무엇인지에 대해 어느 쪽이든 할 수 있으며, 결국에는 누군가가 불행해질 것입니다. – Christopher

답변

88

어때?

>>> s = '23.45678' 
>>> int(float(s)) 
23 

또는 ...은

>>> int(Decimal(s)) 
23 

또는 ...

>>> int(s.split('.')[0]) 
23 

나는 그것보다 훨씬 간단 얻을 것 의심, 난 두려워. 동의하고 계속 진행하십시오.

+3

'import decimal'을 기억하고'decimal.Decimal (5)'로 사용하거나'Decimal import Decimal'에서'Decimal (5)'로 사용하십시오. 나는 항상 잊는다. – teewuane

+0

값에 제공되는 각 옵션의 반올림 유형을주의해야합니다. – Rapnar

1

당신은 사용할 수 있습니다

s = '23.245678' 
i = int(float(s)) 
13

당신이 행동을 반올림의 어떤 종류를 원하십니까? 당신 2.67 3, 또는 반올림 사용하려면 2로 설정하는 마십시오,이 시도 :

s = '234.67' 
i = int(round(float(s))) 

을 그렇지 않으면, 바로 수행

s = '234.67' 
i = int(float(s)) 
2

"변환"당신이에서 변경할 경우에만 의미가 있습니다 하나의 데이터 유형을 충실도의 손실없이 다른 유형으로 변환 할 수 있습니다. 캐릭터 라인으로 나타내지는 수치는 float로, int에 강제했을 때에 정밀도를 잃습니다.

대신 둥근을 원할 것입니다. 아마도 숫자가 통화를 나타내지 않기를 바란다. 그 이유는 반올림이 훨씬 더 복잡해지기 때문입니다.

round(float('23.45678')) 
3
>>> s = '23.45678' 
>>> int(float(s)) 
23 
>>> int(round(float(s))) 
23 
>>> s = '23.54678' 
>>> int(float(s)) 
23 
>>> int(round(float(s))) 
24 

당신은 반올림 여부를 원하는 경우 지정하지 않은 ...

0
round(float("123.789")) 

당신에게 정수 값을 제공하지만, 플로트 식됩니다. 그러나 Python의 duck typing에서는 실제 유형이 일반적으로 적합하지 않습니다. 이것은 또한 가치를 반올림하며 원하지 않을 수도 있습니다. 'round'를 'int'로 바꾸면 그냥 잘리고 실제 int가됩니다. 이와 같이 :

int(float("123.789")) 

그러나 실제 '유형'은 일반적으로 중요하지 않습니다.

1

값을 자르려면 다른 사람이 언급 한 표현 int(float(s))이 가장 좋습니다.반올림을 원한다면 라운드 알고리즘이 원하는 알고리즘 (round documentation 참조)과 일치하면 을 사용하고, 그렇지 않으면 반올림 알고리즘 인 경우 Decimal과 1을 사용해야합니다.

관련 문제