백준 번호 : 18110
간단한 연산과 파이썬의 기본 문법정도만 알면 쉽게 풀리는 문제 였는데 너무 안 풀려서 좀 찾아보니 파이썬의 내장함수인 "round()"가 내 생각과는 다른 결과값을 리턴해서 정리하려한다.
print(round(1.5))
print(round(2.5))
print(round(2.5001))
이러한 코드를 실행 했다고 가정한다면
내가 생각하기엔 당연히 결과값은
이 나와야한다.
하지마 결과는
으로 나온다.
우선 파이썬 공식 문서에서 round에 대한 설명에서
참고 float에 대한 round() 의 동작은 예상과 다를 수 있습니다: 예를 들어, round(2.675, 2) 는 2.68 대신에 2.67 을 제공합니다. 이것은 버그가 아닙니다: 대부분의 십진 소수가 float로 정확히 표현될 수 없다는 사실로부터 오는 결과입니다. 자세한 정보는 부동 소수점 산술: 문제점 및 한계 를 보세요.
라고한다.
정확한 원리는 모르겠지만 인터넷을 찾아보니 어느정도는 규칙은 있는 것 같다.
1. 올림 내림을 결정하는 수가 5가 아니면 그냥 올림 내림을 하면된다.
2. 만약 올림 내림을 결정하는 수가 5라면 여기서 부턴 규칙이 생긴다.
나는 그냥 이 문제에서만 잘 돌아가게끔 round를 새로 만들어서 썻다.
def newRound(num,n=1):
num *= 10**n
if num%10>=5:
return int(num // 10**n +1)
else:
return int(num // 10**n)
좋은 글이네요. 공유해주셔서 감사합니다.