관리 메뉴

솜씨좋은장씨

[Python] round 함수 사용 시 주의 사항! 본문

Programming/Python

[Python] round 함수 사용 시 주의 사항!

솜씨좋은장씨 2021. 8. 22. 13:22
728x90
반응형

1. 소수점 단위 반올림 관련 ( 소수점 두번째 이상 부터 )

오늘 아침에 일어나서 코딩 1일 1문제 풀기 문제로 백준의 이번학기 평점은 몇점? 문제를 푸는데

소수점 세번째 자리에서 반올림을 하는 부분을

round(score, 2)

위처럼 round 함수를 활용하여 구하였는데 이상하게 반올림이 되지않고 버림이 되는 문제가 있었습니다.

 

직접 테스트 해보니 소수점 두번째 부터는 round의 동작

기존에 알고있는 반올림과 다르게

반올림하는 값의 앞의 값이 홀수일 경우 

0~5 값은 내림, 6~9 까지의 값은 올림

반올림하는 값의 앞의 값이 0또는 짝수일 경우

0~4 값은 내림, 5~9 까지의 값은 올림

되었습니다.

 

직접 결과를 확인해보면 아래와 같습니다.

round(2.205, 2)
> 2.21

round(2.215, 2)
> 2.21

round(2.225, 2)
> 2.23

round(2.235, 2)
> 2.23

round(2.245, 2)
> 2.25

round(2.255, 2)
> 2.25

round(2.265, 2)
> 2.27

round(2.275, 2)
> 2.27

round(2.285, 2)
> 2.29

round(2.295, 2)
> 2.29

2. 소수점 첫번째 반올림 관련

추가로 더 알아보니 소수점 첫번째에서 반올림 할때에는 

정수의 값 중 1의 자리의 숫자에 따라 결과 값이 달랐습니다.

 

정수의 값 중 1의 자리의 숫자가 짝수일 경우

0~5 값은 내림, 6~9 까지의 값은 올림

정수의 값 중 1의 자리의 숫자가 홀수일 경우

0~4 값은 내림, 5~9 까지의 값은 올림

이 되었습니다.

 

직접 결과를 보면 아래와 같습니다.

round(0.5)
> 0

round(1.5)
> 2

round(2.5)
> 2

round(3.5)
> 4

round(4.5)
> 4

round(5.5)
> 6

round(6.5)
> 6

round(7.5)
> 8

round(8.5)
> 8

round(9.5)
> 10

% 직접 만든 반올림 함수

def my_round(number, n=1):
    pow_ten = pow(10, n)
    
    number = number * pow_ten
    
    if number % 10 > 4:
        number += (10 - number % 10)
    
    number = number / pow_ten
    return float(str(number)[:n+2])

혹시 틀린 것이 있다면 언제든 댓글로 알려주세요!

앞으로 사용할때 주의하면서 사용해야할 것 같습니다!

읽어주셔서 감사합니다.

Comments