[Python] 올림, 내림, 버림, 반올림 함수

알고리즘 문제를 풀다보면 값을 구할 때

  • 소수점은 버리고 정수 부분만 원하거나
  • 소수점 4째자리까지만 원하는 등

자릿수를 조작해야 하는 경우가 있다.

오늘은 이렇게 소수점 자릿수를 조절할 때 쓰이는 다양한 함수를 정리해보려고 한다.


[ 올림 , 내림, 버림 ]

python에서 올림, 내림, 버림 기능을 사용하려면 math 라이브러리를 사용해야 한다.

📌 math : C 표준에서 정의한 수학 함수에 대한 액세스를 제공하는 모듈


1. 올림 - ceil 함수

math.ceil(x)

: x보다 크거나 같은 가장 작은 정수인 x의 천장값(ceiling)을 반환한다.

import math

print(math.ceil(1.5))   # 2
print(math.ceil(-1.5))  # -1

2. 내림 - floor 함수

math.floor(x)

: x보다 작거나 같은 가장 큰 정수인 x의 바닥값(floor)을 반환한다.

import math

print(math.floor(1.5))   # 1
print(math.floor(-1.5))  # -2

3. 버림 - trunc 함수

math.trunc(x)

: 실수 값 x를 정수로 자른 값을 반환한다.

import math

print(math.trunc(1.5))   # 1
print(math.trunc(-1.5))  # -1

💡 참고로 trunc()int()와 같은 결과를 변환한다.
int(x): 숫자나 문자열 x로부터 만들어진 정수 객체를 돌려준다.


[ 반올림 ]

1. 반올림이란?

반올림은 종류(사사오입, 오사오입 등)에 따라 동작이 조금씩 다르다. 하나씩 알아보자!

✅ 사사오입 (Round-off)

반올림 할 자리의 값이 4 이하이면 버리고, 5 이상이면 올린다.

  • 73
    • 일의 자리에서 반올림: 70
    • 십의 자리에서 반올림: 100
  • 51.61
    • 소수점 둘째 자리에서 반올림: 51.6
    • 소수점 첫째 자리에서 반올림: 52
    • 일의 자리에서 반올림: 50
    • 십의 자리에서 반올림: 100

✅ 오사오입 (Round-to-nearst-even)

5 미만의 숫자는 버림하며 5 초과의 숫자는 올림한다.
5의 경우에는 5의 앞자리가 홀수인 경우에는 올림을 하고, 짝수인 경우에는 버림을 하여 짝수로 만들어준다.

모두 소수점 둘째 자리에서 반올림을 한다고 가정해보면 앞자리 수에 따라 다른 결과가 나온다.

  • 54.65 → 54.6 (앞자리 수가 6, 즉 짝수이므로 버린다.)
  • 54.75 → 54.8 (앞자리 수가 7, 즉 홀수이므로 올린다.)

사실 내가 생각했던 반올림 방식은 사사오입 방식이었는데 공학이나 자연 과학에서는 오사오입 방식을 많이 사용한다고 한다. 이 방식으로 계산하는 것이 오차가 가장 작아서 그렇다고 한다!

🔗 더 자세한 내용은 여기 참고!

이렇게 반올림 방식을 자세히 알아본 이유가 있다! 바로 pythonround() 함수가 바로 이 오사오입 방식을 사용하기 때문이다.


2. round 함수

round(number[, ndigits])

number를 소수점 다음에 ndigits 정밀도로 반올림한 값을 돌려준다.
ndigits가 생략되거나 None이면, 입력에 가장 가까운 정수를 돌려준다.

ndigits 정밀도로 반올림한 값을 돌려준다는 뜻은 소수점 ndigits 자리수에서 반올림을 한다는 것이 아닌, 반올림한 결과가 소수점 아래 ndigits까지 출력한다는 뜻이다.

예를 들어 round(3.12, 1)에서 소수점 첫째 자리에서 반올림한 결과(3)가 아닌, 3.1이 출력된다.

예제

a = 4.5
b = 54.65
c = 54.75

print(round(a))     # 정수 반환
print(round(b, 1))  # 앞자리가 짝수이므로 버림
print(round(c, 1))  # 앞자리가 홀수이므로 올림

실행 결과

4
54.6
54.8

[ 참고자료 ]

https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%AC%EB%A6%BC
https://docs.python.org/ko/3/library/functions.html?highlight=round#round
https://yaneodoo2.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B0%98%EC%98%AC%EB%A6%BC-%EC%98%AC%EB%A6%BC-%EB%82%B4%EB%A6%BC-%EB%B2%84%EB%A6%BC-round-ceil-floor-trunc%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B2%83
https://docs.python.org/ko/3/library/functions.html#int

좋은 웹페이지 즐겨찾기