반응형
문제
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 |