"Life is too short, You need python"
Pyhon으로 수량, 금액 등 수치 관련 작업을 하실 때 가독성이 좋고 깔끔한 출력 값을 원하신다면 반올림, 올림, 내림, 버림 등을 사용하시면 간단히 해결하실 수 있습니다. 반올림, 올림, 내림 그리고 소수점 버림의 원리와 수행 방법에 대해서 간단히 알아보도록 하겠습니다.
Round, Ceil, Floor ( 반올림, 올림, 내림 ) and trunc ( 그리고 버림 )
반올림, 올림, 내림은 수를 대략적(어림수)으로 나타낼 때 쓰는 방법입니다.
Round, 반올림
round()는 소수점 이하 n자리로 반올림 한 숫자를 부동 소수점 수로 반환하는 Python 내장(Built - In) Method입니다.
round(number[, ndigits])
- number : 반올림을 적용할 수, 직접 또는 변수로 전달
- ndigits : 반올림 결과 표기 자리 수 ( parameter 생략 시 default = None )
1. ndigits parameter가 0 또는 양수인 Case부터 보겠습니다.
( 코드 입력 )
number = 1234.5678
print(round(number)) # 입력에 가장 가까운 정수로 반환
print(round(number, None)) # 입력에 가장 가까운 정수로 반환
print(round(number, 0)) # 소수점 첫 번째 자리에서 반올림, float 형태로 반환
print(round(number, 1)) # 소수점 두 번째 자리에서 반올림 / 첫 번째 자리까지 표기
print(round(number, 2)) # 소수점 세 번째 자리에서 반올림 / 두 번째 자리까지 표기
( 출력 결과 )
1235
1235
1235.0
1234.6
1234.57
ndigits 생략 또는 None 입력 시 가장 가까운 정수 값으로 반환하는 것을 볼 수 있습니다.
그 외에도 ndigits = 0 입력 시 number와 같은 type인 float 형태로 반환되어 소수점 첫 번째 자리까지 표기가 됩니다.
'ndigits 생략 또는 None을 입력하는 것과 0을 입력한 경우의 출력 형태는 엄연히 다르다'는 것을 알 수 있습니다.
2. ndigits parameter가 음수인 Case
( 코드 입력 )
number = 1234.5678
print(round(number, -1)) # 1의 자리에서 반올림
print(round(number, -2)) # 10의 자리에서 반올림
print(round(number, -3)) # 100의 자리에서 반올림
print(round(number, -4)) # 1000의 자리에서 반올림
( 출력 결과 )
1230.0
1200.0
1000.0
0.0
number parameter값과 동일한 float 형태로 반환합니다.
하지만 round의 반올림에서 흔히 우리가 알고 있던 것과는 다른 결과를 종종 볼 수 있습니다. 예를 들면 하기와 같은 경우
우리는 그 결과를 각 각 2, 3으로 예상하게 됩니다.
( 코드 입력 )
print(round(1.5))
print(round(2.5))
( 출력 결과 )
2
2
하지만 그 결과는 놀랍게도 둘 다 2가 됨을 보실 수 있습니다. 이는 파이썬의 반올림이 사사오입 원칙(Round half to even : 반올림 대상의 값이 5일 때 앞자리 숫자가 홀수면 올림, 짝수면 내림, Gaussian Rounding / Banker's Rounding)을 따르기 때문인데 이는 합과 평균을 근사할 때 편향을 줄일 수 있다는 장점이 있습니다.
이것과 관련해서 이야기하자면 반올림 만으로도 내용이 많이 길어질 수 있어 파이썬은 이런 방식을 채택하고 있구나 정도 이해하시고 더 심도 있는 내용은 추후 별도 포스팅을 통해 다루기로 하겠습니다.
Ceil, 올림
ceil은 해당 값을 양의 (무한대) 방향으로 가까운 정수로 반환하는 math Library Method입니다. 즉, '주어진 숫자와 같은 정수 또는 주어진 숫자보다 크며 가장 가까운 정수를 반환한다.'입니다.
math Liabrary를 사용하기 때문에 반드시 import를 통해 math Library를 호출해야 합니다.
math.ceil(number)
- number : 올림을 적용할 수, 직접 또는 변수로 전달
( 코드 입력 )
import math
print(math.ceil(7))
print(math.ceil(7.39))
print(math.ceil(7.394))
print(math.ceil(-7))
print(math.ceil(-7.43))
print(math.ceil(-7.438))
( 출력 결과 )
7
8
8
-7
-7
-7
당연하지만 대상이 음수일 경우 가장 크며 가까운 숫자는 숫자가 작아지는 쪽이라는 것에 주의하시면 됩니다.
floor, 내림
floor는 해당 값을 음의 (무한대) 방향으로 가까운 정수로 반환하는 math Library Method입니다. 즉, '주어진 숫자와 같은 정수 또는 주어진 숫자보다 작으며 가장 가까운 정수를 반환한다.'입니다.
math Liabrary를 사용하기 때문에 반드시 import를 통해 math Library를 호출해야 합니다.
math.floor(number)
- number : 내림을 적용할 수, 직접 또는 변수로 전달
( 코드 입력 )
import math
print(math.floor(7))
print(math.floor(7.39))
print(math.floor(7.394))
print(math.floor(-7))
print(math.floor(-7.43))
print(math.floor(-7.438))
( 출력 결과 )
7
7
7
-7
-8
-8
올림과 마찬가지로 대상이 음수일 경우 가장 작으며 가까운 숫자는 숫자가 커지는 쪽이라는 것에 주의하시면 됩니다.
trunc, 버림(소수점 버림)
trunc는 해당 값의 소수 부분을 제거하고 정수 부분만 반환합니다.
math Liabrary를 사용하기 때문에 반드시 import를 통해 math Library를 호출해야 합니다.
math.trunc(number)
- number : 버림을 적용할 수, 직접 또는 변수로 전달
( 코드 입력 )
import math
print(math.trunc(7))
print(math.trunc(7.39))
print(math.trunc(7.394))
print(math.trunc(-7))
print(math.trunc(-7.43))
print(math.trunc(-7.438))
( 출력 결과 )
7
7
7
-7
-7
-7
언듯 보면 내림과 같아 보이지만 대상이 음수일 경우 확실히 구분할 수 있습니다. 말 그대로 소수점을 버린다는 것으로 이해하시면 됩니다.
마무리
반올림, 올림, 내림 그리고 소수점 버림의 원리와 수행 방법에 대해서 간단히 알아보았습니다.
'PYTHON > Tips' 카테고리의 다른 글
(5min. Python) 문자열(String)에서 숫자(Integer)만 추출(extract)하는 방법, , re.sub(), re.findall() (0) | 2022.07.04 |
---|---|
(Python/OS) Absolute & Relative Path(절대 경로 & 상대 경로), getcwd(), chdir(path) (0) | 2022.06.30 |
(5min. Python) Slice / Slicing, 슬라이싱의 이해 ( ASCII art diagram ) (0) | 2022.06.28 |
(Python/Exception) Try ~ Except 예외처리 (0) | 2022.06.28 |
(Python/Basic) Print 활용 TIP(feat. datetime) (0) | 2022.06.25 |