2012-12-08 5 views
1

argv [1]에서 float 숫자로 변환하는 데 어려움을 겪고 있습니다. 기본적으로 소수점 다음에있는 int를 전달하려고 시도하고 가장 가까운 정수로 반올림합니다. (기본 스타터 파이썬 프로젝트) 저는 플로트로 조금 놀아 보려고 노력해 왔습니다.float with argv에서

import sys 

x = int(sys.argv[1]) 
num = x + .5 
s = str(num()) 
point = s.find('.') 
print s[:point] 

if __name__ == "__main__": 
    x(int(sys.argv[1])) 

편집 (현재 코드는 커피와 정리 후) :

import sys 

def x(argument): 
    num = argument + .5 
    s = str(num()) 
    point = s.find('.') 
    print s[:point] 

if __name__ == "__main__": 
    x(int(round(float(sys.argv[1])))) 

확정 코드 (신용에 간다 : NPE)

import sys 

def x(argument): 
    print "Passed in value: " + str(argument) 
    num = argument + .5 
    print "Rounded whole number: " + str(int(num)) 

if __name__ == "__main__": 
    x(float(sys.argv[1])) 
+1

'x'가 함수가되기를 기대하십니까? –

+0

아니요, 가능하다면 전달 된 가치에 대해 더 많은 것을 말할 필요가 있다고 생각하지 않습니다. – camihan

+1

너는별로 의미가 없다. 'x (..)'가'__main__'에서 무엇을 할 것으로 기대합니까? –

답변

2

그것은 당신이 찾고있는 같은 소리 하나

val = round(float(sys.argv[1])) 

또는

val = int(round(float(sys.argv[1]))) 

val의 유형에 따라 다릅니다.

+0

사실 덕분에 코드를 정리할 수 있었고 인수를하지 않았 음을 알게되었습니다. 여전히 이유가 무엇인지 int 인수로 전달할 수 없기 때문에 여전히 float point와 관련된 문제가 있습니다. 너는 나에게 많은 순열을 가지고 노는거야. 적어도 내 문제를 해결하는 데 가까이 온 것 같아! 대단히 고마워요, 멍청한 질문에 빠져서 미안 해요. – camihan

+0

덕분에 실제로 해결할 수있었습니다. 전달 된 함수에서 int를 생략하고 나중에 코드에서 int로 인쇄해야합니다. 도와 줘서 고마워. – camihan