2012-05-25 4 views
1

가 예를 들어, 나눗셈 연산을 최소 값을 설정하는 표준 라이브러리 함수이고 예를 들면 : 또한파이썬에서 나누기 연산에 최소값을 설정하는 방법은 무엇입니까?</p> <pre><code>min(1, a/b) </code></pre> <p>이것은 상기 동작의 최소값을 보장 항상 0</p> <p>1 적이 없을 것이다

min(1, 1/5) 
1 

, 나는 부문 모아 어떻게 :

round_up(1/5) = 1 
을 내가 1/5을 분할 할 때

나는 항상 심지어 올림 함수에 "0"을 얻을 :

math.ceil(1/5) 
0 

답변

3

, 당신은 from __future__ import division을 수행 할 수 있습니다

>>> 1/5 
0 
>>> from __future__ import division 
>>> 1/5 
0.2 
>>> math.ceil(1/5) 
1.0 

당신은 정수 타입, 예를 들어,의 수 결과가 필요한 경우 인덱싱, 방금 대답이 1보다 작을 수는 확인하려는 경우 나 표준 라이브러리에서 아무것도 모르겠지만

int(math.ceil(1/5)) 
2

1/5의 결과는 이미 정수입니다. 부동 소수점 버전을 원하면 1.0/5해야합니다. math.ceil 함수는 예상대로 작동합니다 (math.ceil(1.0/5) = 1.0).

상수 대신 변수로 작업하는 경우 float(x) 함수를 사용하여 정수를 부동 소수점으로 변환하십시오.

2
In [4]: 1/5 
Out[4]: 0 

In [5]: math.ceil(1/5) 
Out[5]: 0.0 

In [7]: float(1)/5 
Out[7]: 0.2 

In [8]: math.ceil(float(1)/5) 
Out[8]: 1.0 
0

당신은 정수를 나눈 정수의 정수이기 때문에 귀하의 예제는 작동하지 않습니다이

>>> def round_up(p, q): 
...  d, r = divmod(p, q) 
...  if r != 0: 
...   d += 1 
...  return d 
... 
>>> round_up(1, 5) 
1 
>>> round_up(0, 5) 
0 
>>> round_up(5, 5) 
1 
>>> round_up(6, 5) 
2 
>>> 

같은 정수에 대한 최대 라운드 기능을 만들 수 있습니다.

귀하의 궁금한 점은 - 작성한 내용이 최선이라고 생각합니다. 기본적으로 포인트 부문 부동 사용하려면

0

를 사용할 수있는 함수는 매우 간단합니다 :

def min_dev(x,y): 
    ans = x/y 
    if ans < 1:  # ensures answer cannot be 0 
     return 1 
    else:   # answers greater than 1 are returned normally 
     return ans 

대신에, 당신이 모든 답을 모아 찾고있는 경우 :

def round_up(x,y): 
    ans = x//y   # // is the floor division operator 
    if x % y == 1:  # tests for remainder (returns 0 for no, 1 for yes) 
     ans += 1  # same as ans = ans + 1 
     return ans 
    else: 
     return ans 

이 나머지 어떤 대답을 반올림합니다. 파이썬 3.3 (및 3.4 알면) 정수 나누기 기본적으로 float 반환합니다 믿습니다 : https://docs.python.org/3/tutorial/introduction.html