round()
round()가 무엇인가?
round()란 숫자를 반올림 해주는 파이썬 내장 함수이다.
round(숫자)
round(숫자, 자릿수)
round(숫자)
print(round(2.5))
print(round(3.5))
print(round(4.5))
print(round(5.5))
위와 같은 코드의 출력 결과를 예상해보자. 3, 4, 5, 6 이 나올 것만 같다.
하지만, python은 조금 다르게 동작한다.
2
4
4
6
왜, 이렇게 동작하는가?
python 입장에선 2.5는 2와 3의 중간이다.
2 2.5 3
그래서 파이썬은 다음과 같이 판단한다.
둘 다 거리가 똑같으면 짝수 쪽으로 간다.
2와 3 중 짝수는 2이기 때문에 출력 결과가 짝수 쪽으로 나오는 것이다.
이것을 우리는 은행가 반올림이라고 한다. python은 이를 적용하여 반올림을 하는 것이다.
round(숫자, 자릿수)
두 번째 인자에 자릿수가 들어갈 수 있는 형태이다. 이는 해당 자릿수까지 남겨놓고 그 다음 자릿수에서 반올림을 한다는 것이다.
자릿수의 부호는 양수와 음수 둘다 가능하다. 또한, float형이 반환될 수 있기 때문에 항상 프로그래머는 이를 주의해야 한다.
자릿수의 부호(양, 음)
정중앙인 0부터 봐보자.
0은 0번 째 자릿수라고 생각할 수 있다. 그 다음 자릿수는 .2로 볼 수 있으므로 0은 15.2에서 5를 가리킨다고 볼 수 있다.
round(15.2, 0)
이면 1번 째 자리의 수는 2이므로 반올림을 하게된 출력 결과는
15.0
이 나올 것이다.
그럼 여기서 의문이 들 것이다.
해당 자리에서 즉, 1번 째 자리에서 반올림을 했다는 것은 그 전까지의 자리까지 인정하고 나머지는 버리기 위함이다.
즉
.2라는 수를 반올림 하면.2는 없어지고15만 출력되어야 하는 것이 아닌가?
하지만 그렇지 않다. 왜냐하면 첫 번째 인자를 넣을 때 자료형을 float로 넣었기 때문에, 반환값도 float이 되기 때문이다.
이제 양수 예시를 봐보자.
round(1.123456, 3)
여기서 세번 째 자릿수까지 남기고, 그 다음 자릿수에서 반올림을 하는 것이므로 출력 결과는 1.123이 될 것이다.
이제 음수 예시를 봐보자.
음수는 양수의 역방향이라고 생각하면 편하다.
round(1234.5, -1)
두 번째 인자가 0일 때 아까의 예시로 적용을 해보면 1234.5에서 4를 가리킴을 알 수 있다. 양수의 방향은 오른쪽이므로 역방향은 왼쪽임을 알 수 있고
-1이 가리키는 값은 1234.5 중 3임을 알 수 있다.
3에서 다음 자릿수 값은 4이므로 반올림을 하게 되면 출력 결과는 1230.0이 나온다.
만약의 숫자보다 자릿수를 크게 잡으면 어떻게 되는가?
다음 예시를 봐보자
round(1.12, 3)
이는 1.12가 표현하는 자릿수를 넘어가는 값을 요청하고 있다.
하지만, 1.12는 1.120으로도 볼 수 있다. 자릿수 3이 가리키고 있는 것은 0으로 보면 되고, 그 다음 값도 0일 테니 반올림을 한 결과는 1.12가 되는 것이다.
또 다른 예시를 봐보자
round(123, -3)
이것또한 123은 0123으로 볼 수 있다. -3이 가리키고 있는 값은 0123 중 0이므로 그 다음 자릿수인 1을 반올림한다.
결국 출력 결과는 0이 되는 것이다.
이 때, 주의 해야 할 것은
round(123.0, -3)
으로 하게 되면
0.0
으로 출력된다. 첫 번째 인자를 float으로 주었기 때문에 반환값도 float가 되는 것이다.
종합적으로 이해해보면 다음 코드의 출력 결과는
round(501.2, -3)
1000.0
이 될 것이다.