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 초과 올림

 

관련 링크

 

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)

 

음수 반올림은 차후에 구현..