[python] 파이썬에서 반올림 5 (또는 다른 숫자)

다음과 같이 반올림 할 수있는 내장 함수가 있습니까?

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 필요하다)뿐만 아니라. 최종 전환 intround() 은 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또는 다른 분수베이스 를 사용할 수있게 합니다.