2013-11-27 2 views
0

저녁 모두,int truncating int

정수를 "자르는 방법"이 궁금합니다. 예를 들어 :

num = 12345678 
num_shrunk = "for example 3"(num) 
print(num_shrunk) 
123 

나는 그러나 내가 정확하게 할 필요가 둥근 기능을 알고있다. 나는 형식 (숫자, "3d")을 시도했지만 소수점 이하 자릿수입니다. 정수가 아니기 때문에 num [0 : 3] 만 인쇄한다고 말할 수도 없습니다.

내가보기에는 분명히 보이지 않는 간단한 방법이 여기에 있습니까?

+0

숫자가 '10 ** num_shrunk '(= 1000)보다 작을 때까지 마음에 떠오르는 일반적인 알고리즘 하나가 10으로 반복해서 나눕니다. – CompuChip

답변

1
N=3 
int(str(num)[:N]) 

당신은 또한 수학적으로 그것을 할 수 ... 그것을해야

def nDigits(int_n): 
    return nDigits(int_n//10) + 1 if int_n > 10 else 1 
num//(10*(nDigits(num)-N) 
# nDigits can also be caluclated as follows: numDigits = int(math.log(num,10))+1 

여전히 문자열로 변환해야하기 때문에 자리

의 총 수를 얻을 수 있지만,
+2

음의 정수로 작동하지 않을 것입니다 – Gerrat

+0

문자열로 변환하고 처리했는데 처리가 끝난 후에도 여전히 계산이 필요하므로 int로 만들 필요가 없습니다. "less is more"프로그래밍으로 분류됩니다. 다른 방법이 있습니까? – Softey

+0

@APD 당신이 묘사하는 것과 같은 잘라내기를 표현 (10을 읽음)한다는 것을 기억하십시오. 이와 같은 연산을 기본 불가지론 수학 공식으로 동축시키는 것은 길고, 복잡하며, 효율성이 떨어집니다. – kalhartt

0

modulus division을 사용하여 R에서이를 수행하는 한 가지 방법을 생각할 수 있습니다.

> num <- 12345678 
> numshrunk <- (num - num %% 100000)/100000 
> numshrunk 
123 

"< -"및 "%%"대신 Python에서 적절한 변수 할당 및 모듈러스 나누기 연산자를 사용하여 동일한 기술을 적용 할 수 있습니다. 위의

더 유용 버전 : 의도 한대로

> N = 3 
> num <- 12345678 
> numshrunk <- (num - num %% 10^(N-1))/10^(N-1) 
> numshrunk 
123 
+0

즉'='와'%'입니다. – rlms

0
def shrink(number,amount=0): return number//(10**amount) 
print shrink(1234,2) 

작동합니다. d // i는 바닥 구분이고 d ** i는 지수 곱하기입니다. 금액을주지 않으면 (shrink (5)) 5를 반환합니다.