[Python] round 함수의 오류

round를 사용해서 알고리즘 문제를 풀려고했는데 로직에 문제가 없는것 같음에도 불구하고 계속해서 틀린 판정을 받았다. 
아무리 봐도 오류가 날 만한 구석이 round 메서드 밖에 없어서 구글링 해봤는데 아니나다를까, 관련된 여러 글이 있었다. 
문제는 round의 반올림 원칙에 있었다.
사람이 기본적으로 사용하는 반올림 방식은 4사5입이다. 반올림할 자리가 4 이하이면 버리고, 5 이상이면 올리는 방식이다.
하지만 이렇게 할 경우 5로 끝나는 데이터가 많아질 경우 전체 결과가 0.5정도 커질 수 있기 때문에 균형을 맞추기 위해 파이썬에서 사용하는 방식이 5사5입이다.
5사5입은, 5 앞의 숫자가 짝수면 버리고, 홀수면 올리는 방식이다. 
따라서 우리가 생각하는 일반적인 4사 5입 방식이 필요한 경우,
1. 직접 만들어서 사용하는 방법
def new_round(num):
    return int(num)+1 if (num-int(num)) >= 0.5 else int(num)
cs
2. Decimal 모듈을 사용하는 방법

두 가지가 있다.


참고

No comments:

Powered by Blogger.