Development/Language

Python 반올림 오류 해결

비완 2020. 4. 30. 17:38
반응형

문제

python에서는 숫자를 올리고 내리고자 하는 경우에는 python 내장 모듈인 math 모듈을 import하여 사용할 수 있다.

그리고 반올림은 간단히 round() 를 사용하면 된다. 그런데

round() 함수의 결과가 기대와는 다르게 나오는 경우를 발견하였다.

1.5의 반올림 값은 2이고, 2.5의 반올림 값은 3이다.

지극히 당연하기에 round(1.5), round(2.5) 의 결과값을 각각 2, 3 으로 기대하고 해당 함수를 실행시켜보았다.

실행결과 round(1.5)의 결과는 예상과 같게 2가 나왔지만, round(2.5)의 결과는 예상과는 다르게 2 가 나왔다.

 

원인

python에서 반올림 기본설정은 반올림할 자리의 수가 5이면 반올림 할 때 앞자리의 숫자가 짝수면 내림하고 홀수면 올림한다.

그래서 round(1.5)는 앞자리 숫자가 홀수(1)이기에 반올림하여 1.5 => 2 의 결과가 나왔고,

round(2.5)는 앞자리 숫자가 짝수(2)이기에 내림하여 2.5 => 2의 결과가 나왔다.

 

 

해결

하지만, 원하는 결과는 이게 아니기에 해당 방법해결을 위해 별도의 반올림함수를 구현하여 이를 해결하였다.

아래는 구현한 함수이다.

def roundUp(num):
    return int(num) + 1 if (num - int(num)) >= 0.5 else int(num)

 

추가로 검색해보니, decimal 모듈의 Decimal 을 활용하여도 해결은 가능하다고 한다.

반응형

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

[Java] 원격파일 유효여부 체크  (0) 2024.03.06
순열, 조합, 중복순열  (0) 2022.12.29
빈값 체크  (0) 2019.10.31
HttpClient timeout 설정  (0) 2019.10.14
문자열 중복 찾기  (0) 2019.09.26