코테 공부를 하다가, 파이썬 내장 함수인 round 함수를 사용하다가 특이점을 발견하였다.
아래는 파이썬 round 함수 공식문서에 적혀있는 글이다.
참고 float에 대한 round() 의 동작은 예상과 다를 수 있습니다: 예를 들어, round(2.675, 2) 는 2.68 대신에 2.67 을 제공합니다. 이것은 버그가 아닙니다: 대부분의 십진 소수가 float로 정확히 표현될 수 없다는 사실로부터 오는 결과입니다. 자세한 정보는 부동 소수점 산술: 문제점 및 한계 를 보세요.
관련해서 찾아보니, 파이썬에서의 반올림은 우리가 알고있는 일반적인 반올림과 다른 결과를 보인다는 것을 알게되었다.
우리가 일반적으로 알고있는 반올림은 "사사오입", 4 이하의 숫자는 내림, 5 이상의 숫자는 올리는 방법이다.
그러나, 파이썬에서는 "오사오입", 5 미만의 숫자는 내림, 5 초과의 숫자는 올림,
그리고 반올림할 자릿수자 5일 때는 5의 앞자리가 홀수인 경우에는 올림, 짝수인 경우에는 내리는 방법이다.
자세한 내용은 해당 문서를 참고한다.
따라서 파이썬에서 사사오입의 반올림을 구현하는 방법은 다음과 같다.
소수 첫째 자리에서 반올림한다고 하면, 해당 값이 양수이면 0.5를 더해주고, 음수이면 0.5를 빼준다. 그리고 내림을 적용한다.
-> 소수점 첫번째가 아닌, 다른 부분에서도 반올림 할 수 있기 때문에 이를 고려해주어야 한다.
즉, 소수 자릿수에 반절을 더하고 내림을 시켜주는 방식
a = 66.5
a = a + 0.5
a = int(a)
# 또는
a = floor(a)
'개발 > algorithm' 카테고리의 다른 글
[코드트리] 코드트리 빵 - Python (1) | 2023.10.11 |
---|---|
[프로그래머스][level1] 달리기 경주 - python (0) | 2023.08.02 |
[백준 12919번] A와 B 2 - python (0) | 2023.02.01 |
[백준 1806번] 부분합 - python (0) | 2023.02.01 |
[프로그래머스][level3] 양과 늑대 - Python (0) | 2023.01.17 |