알고리즘 문제를 풀다보면 값을 구할 때
- 소수점은 버리고 정수 부분만 원하거나
- 소수점 4째자리까지만 원하는 등
자릿수를 조작해야 하는 경우가 있다.
오늘은 이렇게 소수점 자릿수를 조절할 때 쓰이는 다양한 함수를 정리해보려고 한다.
올림, 내림, 버림
python에서 올림, 내림, 버림 기능을 사용하려면 math
라이브러리를 사용해야 한다.
`math`: C 표준에서 정의한 수학 함수에 대한 액세스를 제공하는 모듈
올림 - ceil()
math.ceil(x)
x
보다 크거나 같은 가장 작은 정수인x
의 천장값(ceiling)을 반환한다.
import math
print(math.ceil(1.5)) # 2
print(math.ceil(-1.5)) # -1
내림 - floor()
math.floor(x)
x
보다 작거나 같은 가장 큰 정수인x
의 바닥값(floor)을 반환한다.
import math
print(math.floor(1.5)) # 1
print(math.floor(-1.5)) # -2
버림 - trunc()
math.trunc(x)
- 실수 값
x
를 정수로 자른 값을 반환한다.
import math
print(math.trunc(1.5)) # 1
print(math.trunc(-1.5)) # -1
- 참고로
trunc()
는int()
와 같은 결과를 반환한다.
📌 int(x): 숫자나 문자열 `x`로부터 만들어진 정수 객체를 돌려준다
반올림
반올림이란?
반올림은 종류(사사오입, 오사오입 등)에 따라 동작이 조금씩 다르다.
사사오입 (Round-off)
반올림 할 자리의 값이 4 이하이면 버리고, 5 이상이면 올린다.
- 73
- 일의 자리에서 반올림:
3
은 4 이하이므로 버린다. ➡️ 70 - 십의 자리에서 반올림:
7
은 5 이상이므로 올린다. ➡️ 100
- 51.61
- 소수점 둘째 자리에서 반올림:
1
은 4 이하이므로 버린다. ➡️ 51.6 - 소수점 첫째 자리에서 반올림:
6
은 5 이상이므로 올린다. ➡️ 52 - 일의 자리에서 반올림:
1
은 4 이하으므로 버린다 ➡️ 50 - 십의 자리에서 반올림:
5
는 5 이상이므로 올린다. ➡️ 100
오사오입 (Round-to-nearst-even)
- 5 미만의 숫자는 버림하며 5 초과의 숫자는 올림한다.
- 5의 경우에는 5의 앞자리가 홀수인 경우에는 올림을 하고, 짝수인 경우에는 버림을 하여 짝수로 만들어준다.
모두 소수점 둘째 자리에서 반올림을 한다고 가정해보면 앞자리 수에 따라 다른 결과가 나온다.
- 54.65 ➡️ 54.6 (앞자리 수가 6, 즉 짝수이므로 버린다.)
- 54.75 ➡️ 54.8 (앞자리 수가 7, 즉 홀수이므로 올린다.)
사실 내가 생각했던 반올림 방식은 사사오입 방식이었는데 공학이나 자연 과학에서는 오사오입 방식을 많이 사용한다고 한다.
이 방식이 오차가 가장 작아서 그렇다고 한다!
🔗 더 자세한 내용은 여기 참고!
이렇게 반올림 방식을 자세히 알아본 이유가 있다! 바로 python의 round()
함수가 바로 이 오사오입 방식을 사용하기 때문이다.
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
📚 Reference
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
'Language > Python' 카테고리의 다른 글
[Python] 슬라이싱에 대해 알아보자! (0) | 2023.10.12 |
---|---|
[Basic] Python 2차원 리스트의 최댓값, 최솟값 구하기 (0) | 2023.06.27 |
[String] Python 문자열 메소드 정리 (0) | 2023.06.15 |
[Basic] Python으로 입출력하기 (1) | 2023.06.13 |