Python/Utils
[Utils] 파이썬 반올림 구현 (ft. 사사오입, round 함수 )
yubi5050
2024. 4. 21. 13:34
반올림 종류
파이썬 round() 반올림 함수는 기본적으로 오사오입의 방식을 따른다.
반올림 종류
- 사사오입 (Rounding half up) : 4 이하 버림, 5 이상 올림
- 오사오입 (Rounding half to even) : 5 미만 버림, 5 초과 올림 / 5는 앞자리가 홀수인 경우 올림, 짝수인 경우 버림 => 수를 짝수로 만들어 주는 방식 ex) 35 -> 40 / 25 -> 20 / python의 round() 함수
- 오사육입 (Rounding half down) : 5 이하 버림, 5 초과 올림
관련 링크
- 반올림 위키 : https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%AC%EB%A6%BC
- python3 round() 함수 링크 : https://docs.python.org/3/library/functions.html#round
Python 커스텀 round() 함수
목표
- 기존 round() 함수 처럼 첫번째 인자 : 수 / 두번째 인자 digits
- 정수 부분을 반올림 하는 경우 digits 를 음수로 입력 (ex. round(356, -2) : 10의 자리에서 반올림
- 자연수 및 양의 실수 처리
기존의 python round() 함수 처럼 .
# 반올림 - 사사오입 방법 (양수 전용, 음수는 그냥 round)
def round_half_up(num, digits=0):
# 자연수 | 반올림 자릿수 음수 | (ex. 331600, -3) => 332000
if num >= 0 > digits and (int(num) == num):
epsilon = 0.0000001
return round(num + epsilon, digits)
# 양의 실수 | 반올림 자릿수 양수
elif num >= 0 and digits >= 0:
multiplier = 10**digits
return math.floor(num * multiplier + 0.5) / multiplier
# 나머지 반올림
else:
return round(num, digits)
음수 반올림은 차후에 구현..