코드업1015_Round를 안쓰는 반올림

Jooni·2020년 11월 3일
0

알고리즘

목록 보기
3/7

코드업1015

문제

실수(float) 1개를 입력받아 저장한 후,
저장되어 있는 값을 소수점 셋 째 자리에서 반올림하여
소수점 이하 둘 째 자리까지 출력하시오.

참고
%.3f 와 같은 형식으로 지정하면,
소수점 이하 넷 째 자리에서 반올림하여 소수점 이하 셋 째 자리까지 출력하라는 의미이다.

정답1

a = float(input())
print("%.2f" % a)

정답2

a = float(input())
a = "{0:.2f}".format(a)
print(a)

라운드 함수를 쓰지 않는 이유는 다른 블로그들에도 나와 있는 것 처럼
Round_Half_Even방식이기 때문이라 한다.
우리가 알고 있는 0.5 -> 1.0이 되는 방식은 Round_Half_Up방식이다.
Round_Half_Even 영어로 Round to Nearest even이라고 하는데 반올림 하려는 자리수가 5인 경우 바로 앞자리 수가 홀수면 올림, 짝수면 버림을 한다.

소수 세째자리에서 반올림 한경우(라운드)

a = float(input())
print(round(a, 2))

1.335 <-인풋으로 입력 받은 값
1.33

원래 우리가 알고 있는 방식으로는 1.34가 되어야 하는 것이지만
반올림 하려는 자리수 바로 앞자리가 홀수 임으로 버림을 한다.


[숙제]

왜... 파이썬은 이런 번거로운 방식을 채택한 것일까?라운드

몇가지 찾아보니 라운드 함수는 반올림함수가 아니고 은행에서 쓰는 전용 함수라고 본거 같다. 이거 또한 왜 파이썬에서 기본으로 채택했는지 궁금하나... 할게 많음으로.. 일단 지금은 패스..

import decimal

a = float(input())
print(decimal.ROUND_HALF_DOWN(a))

이렇게 직접적으로 하프다운방식을 쓴는 방법도 있는거 같은데 아직 성공하진 못했다. 나중에 또 관심이 생기면 업데이트하면서 알아보도록 해야겠다.

profile
이해가 안돼시거나 질문이 있으신 분들은 댓글로 남겨주세요. 성심성의껏 응하겠습니다!

0개의 댓글