본문 바로가기
프로그래밍/Python

[Python] round 함수 : 반올림 (2) - 예상과는 다른 결과

by 빛밤하늘 2021. 5. 15.
반응형

2021.05.13 - [프로그래밍/Python] - [Python] round 함수 : 반올림 (1) - 사용 방법

 

[Python] round 함수 : 반올림 (1) - 사용 방법

백준의 알고리즘 문제를 풀면서 소수 몇 번째 자리에서 반올림을 하여 출력을 하는 문제를 몇 가지 만났습니다. 개념 자체는 쉬운 개념이지만, 한 번씩 해당 함수의 사용법을 까먹곤 해

brightnightsky77.tistory.com

 

 

 

이전에 파이썬에서 반올림을 할 때 사용하는 함수 round에 대해 포스팅해봤습니다.

그런데, 이 round 함수는 우리가 일반적으로 알고 있는 결과와 다르게 나올 때가 있습니다.

 

다음은 우리가 알고 있는 반올림과는 다른 결과를 출력하는 파이썬 코드와 결과입니다.

# 소수점 첫째 자리에서 반올림해 2가 나올 것이라 예상해봅니다.
# 예상대로 2가 출력됩니다.
print("1.5를 소수 첫째 자리에서 반올림한 결과:", round(1.5))

# 소수점 첫째 자리에서 반올림해 3이 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 2가 출력됩니다.
print("2.5를 소수 첫째 자리에서 반올림한 결과:", round(2.5))

# 소수점 첫째 자리에서 반올림해 4가 나올 것이라 예상해봅니다.
# 예상대로 4가 출력됩니다.
print("3.5를 소수 첫째 자리에서 반올림한 결과:", round(3.5))

# 소수점 첫째 자리에서 반올림해 5가 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 4가 출력됩니다.
print("4.5를 소수 첫째 자리에서 반올림한 결과:", round(4.5))
print("----------------------------------------\n")

# 일의 자리에서 반올림해 120이 나올 것이라 예상해봅니다.
# 예상대로 120이 출력됩니다.
print("115를 일의 자리에서 반올림한 결과:", round(115, -1))

# 일의 자리에서 반올림해 130이 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 120이 출력됩니다.
print("125를 일의 자리에서 반올림한 결과:", round(125, -1))

# 일의 자리에서 반올림해 140이 나올 것이라 예상해봅니다.
# 예상대로 140이 출력됩니다.
print("135를 일의 자리에서 반올림한 결과:", round(135, -1))

# 일의 자리에서 반올림해 150이 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 140이 출력됩니다.
print("145를 일의 자리에서 반올림한 결과:", round(145, -1))

예상과는 다른 결과가 나오는 round 함수

 

다음과 같이 음수에서도 우리가 알고 있는 반올림과는 다른 결과를 출력합니다.

# 소수점 첫째 자리에서 반올림해 -2가 나올 것이라 예상해봅니다.
# 예상대로 -2가 출력됩니다.
print("-1.5를 소수 첫째 자리에서 반올림한 결과:", round(-1.5))

# 소수점 첫째 자리에서 반올림해 -3이 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 -2가 출력됩니다.
print("-2.5를 소수 첫째 자리에서 반올림한 결과:", round(-2.5))

# 소수점 첫째 자리에서 반올림해 -4가 나올 것이라 예상해봅니다.
# 예상대로 -4가 출력됩니다.
print("-3.5를 소수 첫째 자리에서 반올림한 결과:", round(-3.5))

# 소수점 첫째 자리에서 반올림해 -5가 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 -4가 출력됩니다.
print("-4.5를 소수 첫째 자리에서 반올림한 결과:", round(-4.5))
print("----------------------------------------\n")

# 일의 자리에서 반올림해 -120이 나올 것이라 예상해봅니다.
# 예상대로 -120이 출력됩니다.
print("-115를 일의 자리에서 반올림한 결과:", round(-115, -1))

# 일의 자리에서 반올림해 -120이 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 -120이 출력됩니다.
print("-125를 일의 자리에서 반올림한 결과:", round(-125, -1))

# 일의 자리에서 반올림해 -140이 나올 것이라 예상해봅니다.
# 예상대로 -140이 출력됩니다.
print("-135를 일의 자리에서 반올림한 결과:", round(-135, -1))

# 일의 자리에서 반올림해 -150이 나올 것이라 예상해봅니다.
# 그런데 예상과는 달리 -140이 출력됩니다.
print("-145를 일의 자리에서 반올림한 결과:", round(-145, -1))

음수에서도 예상과는 다른 결과가 나오는 round 함수

 

 

 

 

 

 

 

 

우리가 일반적으로 알고있는 반올림의 방법은 다음과 같습니다.

 

  • 0 ~ 4인 숫자를 반올림하면 0으로 버리고,
  • 5 ~ 9를 반올림하면 0으로 버리고 다음 자리 숫자에 1을 더합니다.

이것을 사사오입(四捨五入)이라고 합니다.

 

그런데, 파이썬의 round 함수는 위의 사사오입과는 약간 다른

오사오입(round-to-nearest-even)이라는 방식을 사용합니다.

오사오입 방식은 반올림을 하는 자리의 숫자가 5인 경우, 다른 결과가 나올 수 있습니다.

 

오사오입의 반올림은 다음과 같습니다.

 

  • 0 ~ 4인 숫자를 반올림하면 사사오입과 같이 0으로 버리고,
  • 6 ~ 9인 숫자를 반올림하면 사사오입과 같이 0으로 버리고 다음 자리 숫자에 1을 더합니다.
  • 5인 숫자를 반올림할 때, 다음 자리 숫자가 홀수인 경우에는 올림을 하고,
  • 5인 숫자를 반올림할 때, 다음 자리 숫자가 짝수인 경우에는 버림을 합니다.

 

밑의 링크는 반올림에 대한 위키백과 링크입니다.

 

반올림 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 사사오입은 여기로 연결됩니다. 대한민국의 제2차 헌법 개헌에 대해서는 사사오입 개헌 문서를 참조하십시오. 반올림(半-)은 근삿값을 구하는 방법 중 하나이

ko.wikipedia.org

 

위와 같이 파이썬에서는 오사오입 방식의 반올림을 하는 round 함수를 제공하지만

알고리즘 문제에서는 사사오입 방식의 반올림 결과를 원할 때도 있습니다.

 

다음 포스팅에서는 우리가 알고있는 반올림 방식인 사사오입 방식을

파이썬에서 구현하는 방법에 대해서 올려보겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

반응형

댓글