우리가 주로 사용하는 컴퓨터 언어에는 반올림 함수가 내장되어 있다.

 

예를 들면 C나 C++의 경우 round()라는 함수가 존재하고, 수학 관련 라이브러리를 사용한다.

 

#include <math.h>  // C언어의 경우

#include <cmath>  // C++의 경우

 

using namespace std // C++의 경우

 

int main(){

 

   int a = round(4.5);

 // a는 5라는 값을 가진다. 

 

   return 0;
}

 

이런 식으로 이미 구현되어있는 반올림 함수가 있다.

 

파이썬도 물론 있다.

 

파이썬의 반올림 내장함수는 round()이다.

 

하지만 여기서 매우 어이가 없는 걸 볼 수가 있는데

 

 

print(round(3.5))
print(round(3.4))
print(round(4.5))

print(round(4.6))

 

이렇게 하면 결과가 

4

3

5

5

 

이렇게 나올 것으로 예상할텐데 실제로는

4

3

4

5

이렇게 나온다.

 

그 이유는

파이썬에서 round 함수로 0.5를 반올림할 때, 정수 부분이 짝수면 반내림이 되고, 홀수면 반올림이 된다.

 

즉 3.5의 경우에는 반올림이 되서 4가 되고

4.5의 경우에는 반내림이 되어서 4가 된 것이다.

 

이 문제를 해결해주기 위해서는

1. 반올림 함수를 새로 구현해주든가,

2. 짝수일 경우 0.1을 더하여 round 함수를 사용하면 된다.

 

물론 round 함수에 인자를 넣으면, 소수점 첫번째가 아닌 다른 부분에서도 반올림할 수 있기 때문에

정수에서 반올림, 소숫점 두번째, 세번째에서 반올림할 때도 이 부분을 생각해주어야한다.

 

사사오입이 정확히 이런 의미는 아니지만, 편하게 외우기 위하여 사사오입이라고 외우면 편하다.

사(4)일 땐 버리고, 오(5)일 땐 올리고,

짝수일땐 버리고, 홀수일땐 올리고라고 생각하면 편하다.

 

 

 

C/C++/JavaScript 같은 C에서 파생된 언어에서는 내가 아는 반올림과 같았는데

파이썬은 이럴 줄은 몰랐다...ㅠㅠ 나중에 round를 사용한 코드에서 원하는 Output이 제대로 안나온다면

이 문제가 아닐까 생각해보는게 좋을 것 같다.

 

 

 

혹시 몰라서 테스트해본 JavaScript

내가 아는 반올림이 맞다..

 

왜 파이썬은..아닐까...하ㅠㅠ 

 

JavaScript

 

반응형

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

Python extend 와 append  (0) 2020.05.16
Python 입력 받기  (0) 2020.05.16

+ Recent posts