다음과 같이 반올림 할 수있는 내장 함수가 있습니까?
10 -> 10
12 -> 10
13 -> 15
14 -> 15
16 -> 15
18 -> 20
답변
파이썬의 표준 함수를 모르지만 이것은 저에게 효과적입니다.
파이썬 2
def myround(x, base=5):
return int(base * round(float(x)/base))
파이썬 3
def myround(x, base=5):
return base * round(x/base)
위의 이유가 무엇인지 쉽게 알 수 있습니다. 숫자를 5로 나눈 값이 올바르게 반올림 된 정수인지 확인하려고합니다. 그래서, 우리는 먼저 정확히 (그렇게 round(float(x)/5)
곳이 float
우리는 5 곱셈, 그리고 우리가 5로 나눈 이후에만 Python2 필요하다)뿐만 아니라. 최종 전환 int
은round()
은 Python 2에서 부동 소수점 값을 반환 입니다.
base
매개 변수 를 제공하여 기본적으로 5 로 설정하여 함수를보다 일반적으로 만들었습니다 .
답변
정수가 아닌 값 (예 : 0.05)으로 반올림하는 경우 :
def myround(x, prec=2, base=.05):
return round(base * round(float(x)/base),prec)
매개 변수 값을 변경하지 않고도 검색을 수행하고 코드에서 “round (“를 “myround (“)로 변경하기 때문에이 기능이 유용하다는 것을 알았습니다.
답변
스케일링의 문제 일뿐입니다
>>> a=[10,11,12,13,14,15,16,17,18,19,20]
>>> for b in a:
... int(round(b/5.0)*5.0)
...
10
10
10
15
15
15
15
15
20
20
20
답변
‘휴식’을 제거하면 효과가 있습니다.
rounded = int(val) - int(val) % 5
값이 정수인 경우 정수 :
rounded = val - val % 5
기능으로서 :
def roundint(value, base=5):
return int(value) - int(value) % int(base)
답변
def round_to_next5(n):
return n + (5 - n) % 5
답변
round (x [, n]) : 값은 10의 거듭 제곱 n에 가장 가까운 배수로 반올림됩니다. 따라서 n이 음수이면 …
def round5(x):
return int(round(x*2, -1)) / 2
10 = 5 * 2이므로 5.0으로 부동 나누기와 곱셈 대신 정수 나누기와 곱셈을 2로 사용할 수 있습니다. 비트 쉬프팅을 좋아하지 않는 한 그게 중요하지 않습니다.
def round5(x):
return int(round(x << 1, -1)) >> 1
답변
죄송합니다, Alok Singhai의 답변에 댓글을 달고 싶지만 평판이 부족하여 = /
어쨌든, 우리는 한 단계 더 일반화하고 갈 수 있습니다.
def myround(x, base=5):
return base * round(float(x) / base)
이것은 우리가 정수가 아닌베이스, .25
또는 다른 분수베이스 를 사용할 수있게 합니다.