(python) round 함수 알고리즘 재창조. 소숫점 아래에서의 반올림.

조회수 181회

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)
    
    • 알고리즘 연습입니다~ 감사합니다^^ 한번 해보겠습니다~~ 배창일 2022.11.9 09:56
    • 수정된 내용 확인 바랍니다. 그리고 대충 짠 거라 실수한 부분이 있을 수 있습니다. ㅠㅠ 초보 2022.11.9 09:57
    • 넵 감사합니다~ 배창일 2022.11.9 09:57
    • 이상한데요. daewon 2022.11.9 10:11
    • daewon님 혹시 도움주실 것 있으시면 부탁드립니다^^ 배창일 2022.11.9 11:06
  • 다른 함수 안쓰고 구현하기

    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

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.