ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] round함수의 비밀
    Language/Python 2024. 7. 31. 14:11

    알고리즘 문제를 풀다가 python round 함수가 우리가 생각한대로 작동하지 않는다는 사실을 알게 되었다.

    우리가 아는 반올림(round)

    사사오입

    5이상은 올리고, 5미만은 내린다.


    python에서의 round()

    파이썬에서는 오사오입의 방식을 사용해 반올림을 구현한다.

    오사오입

    5미만은 버림, 5초과면 올린다.
    5일 경우, 앞자리가 짝수면 버리고 홀수면 올린다.

    오사오입의 방식을 따르므로
    round(2.5) -> 3
    round(3.5) -> 3
    인 당황스러운 답을 얻게 된다.

    [!important]
    슬프지만 사사오입으로 직접 구현해야한다.


    직접 구현해서 사용하는 round()

    반올림을 사사오입 방식으로 구현하기 위해서는 여러가지 방법이 있지만, 내가 사용한 방법을 정리해보려 한다.

    math.floor()한 값에 0.5를 더한 값보다 큰지 작은지를 확인하는 방식이다.

    def round_new(num):
        if math.floor(num) + 0.5 <= num:
            num = math.ceil(num)
        else:
            num = math.floor(num)
        return num

    위와 같이 간단하게 구현할 수 있다.

    round함수가 버젓이 있는데도 새로 구현해야 한다는 건 귀찮은 일이긴 하지만, 세상엔 다양한 rounding 방식이 있다고 한다.

    추가적인 것은 아래를 참고하세용.
    https://en.wikipedia.org/wiki/Rounding

    'Language > Python' 카테고리의 다른 글

    [Python3] 람다식 (lambda)  (0) 2024.07.25
Designed by Tistory.