(python) round 함수 알고리즘 재창조. 소숫점 아래에서의 반올림.
조회수 429회
round함수 알고리즘을 다시 만들려고 하는데 소숫점 범위 처리 부분이 아리송하네요. 지금까지 진행한 부분입니다.
def my_round(number, ndgits=None):
if number<0: return int(number +0.5) -1
return int(number - 0.5)+1
test = 1.74789
a=my_round(test)
print(a)
이렇게 하면 일반 정수 반올림은 되는데, 소숫점 몇까지 반올림 설정이 없습니다. 다른 함수를 안쓰고 코딩하려면 어떤 방법으로 해야할까요?
2 답변
-
소수점 자릿수에 대해 반응하도록 만들면 될 겁니다.
그런데 굳이 기본으로 제공되는 기능을 코드로 만드는 이유가 있나요?
def a(number, ndgits = 1): ndgits = 5 * 0.1**ndgits print(ndgits) a, b = divmod(number, ndgits) print(a, b) if a % 2: return int(number) + 1 else: return int(number) b = 0.8 c = a(b, 3) print(c)
-
다른 함수 안쓰고 구현하기
def my_round(number, ndgits=1): return int((number*(10**ndgits) + (- 5 if number < 0 else 5))/10)/(10**(ndgits-1)) test = 1.74789 print(my_round(test,1)) #2.0 print(my_round(test,2)) #1.7 print(my_round(test,3)) #1.75 print(my_round(test,4)) #1.748
- 이야~ 정말 잘되요! 감사합니다^^ 배창일 2022.11.9 13:34
- 저 그런데 ndgits=None, 이랑 ndgits=1 초기화한거랑 뭐가 다른점인가요? 배창일 2022.11.9 13:39
- 그리고 원래 round함수와 같은 지 돌리는데.. 3번째에서 에러가 나네요 배창일 2022.11.9 13:41
- test = 1.74789 assert my_round(test) == round(test) assert my_round(-test) == round(-test) assert my_round(test, 3) == round(test, 3) assert my_round(-test, 2) == round(-test, 2) 배창일 2022.11.9 13:41
- 제가 만든건 소숫점 ndgits자리에서 반올림 하는거고 round는 ndgits자리 밑에서 반올림해서 ndgits자리까지 보여주는 거에요 금밈미 2022.11.9 14:27
- 아.. 그렇군요. 배워야 할게 너무 많네요 ㅎㅎ 감사합니다^^ 배창일 2022.11.9 14:28
댓글 입력