반응형
Python에서 반올림을 필요로 하는 상황이 많다
우선 round 함수의 사용법을 보겠다
test = 1.74789
print(round(test)) #2
print(round(test, 3)) #1.748
print(round(-test, 2)) #-1.75
위의 예제처럼
첫 번째 인자에 반올림 할 수가 들어가고 두 번째 인자는 몇 번째 자리까지 사용할 건지에 대한 옵션이다.
두번째 인자가 들어가지 않거나 None이면 입력에 가장 가까운 정수로 반환한다
여기서 사용할 수식중 제곱연산과 나머지 연산에 대한 예시는 다음과 같다.
# 제곱 연산은 ** 연산자로 계산할 수 있다.
10 ** 2 == 100
# mod(나머지 연산)는 % 연산자로 계산할 수 있다.
5 % 2 == 1
위 정보들을 토대로 설계해보겠다.
우선 두번째 인자가 None일때는 0으로 초기화하고 시작한다.
그 후 1번째 인자에 2번째 인자에서 값을 준 만큼 소수점 자리를 옮겨서 뒤를 버리고
올림, 내림을 한 뒤 원래의 소수점 자리로 돌아오게 해준다.
설명이 어려운데 직접 코드로 보면 다음과 같다.
def my_round(number, ndgits=None):
if ndgits is None: #값 없을 시 0 초기화
ndgits = 0
mult = 10 ** (ndgits + 1) # 소수점 자리 옮기기 위해 생성(10의 n승을 구함)
eff = int(number * mult) # 소수점 자리 버림
if eff % 10 >=5: # %연산으로 끝자리만 남긴 후 올림/내림 여부 판단
eff += (10-eff%10)
else:
eff -= eff%10
number = eff /mult # 원래의 소수점 자리로 돌려놓기
return number
이해에 도움이 되도록 라인마다 comment를 써놓았다.
잘 구현되었는지 테스트를 해보면
test = 1.74789
assert round(test) == my_round(test)
assert round(test, 3) == my_round(test, 3)
assert round(-test, 2) == my_round(-test, 2)
잘 동작하는 것을 볼 수 있다.
반응형
'Studying > Python' 카테고리의 다른 글
[Python] 내장함수 range 구현 (0) | 2022.05.18 |
---|---|
[Python] 내장함수 max, min 구현 (0) | 2022.05.16 |
[Python] 내장함수 enumerate 구현 (0) | 2022.05.15 |
[Python] 내장함수 abs 구현 (0) | 2022.05.13 |
[Python] 내장함수 all 구현 (0) | 2022.05.12 |
댓글