나를 정말 짜증나게 하는 파이썬 반올림과 소수점...관련 정리

ssook·2023년 11월 6일
0

TIL

목록 보기
12/17

백준이나 코드트리 등 PS 하다가 자주 쓰이는
소수점 자리 지정,
그리고 매 번 맞닥뜨리는 파이썬 반올림 관련 이슈에 대해 정리해 보았다.

나중에 문제 풀 때 내가 참고하기 위해 사용하려구 한다...

파이썬 반올림

파이썬의 round.
여기까지 검색해서 들어왔다면 해당 함수가 어떤 역할을 하는지는 잘 알 거 같다.
반올림 함수는 원래 주어진 숫자를 가까운 정수로 그냥 반올림 해줘야 하는데,

파이썬은 정말 짜증나게도 오사오입을 기준으로 반올림을 한다.
그 이야기인 즉슨, 소수 부분이 0.5 이상인 경우 가까운 짝수 정수로 반올림이 된다는 이야기다
( round(2.5)는 3.0이 아닌 2.0으로 반올림된다.)

1. decimal 모듈 사용

여러분이 원하는 일반 반올림을 하려면, decimal 모듈을 따로 또 사용해줘야 한다.

사용법은 아래와 같다.


from decimal import Decimal, ROUND_HALF_UP

decimal_number = Decimal('2.5')
rounded_number = decimal_number.quantize(Decimal('1.0'), rounding=ROUND_HALF_UP)

rounding 방식으로 ROUND_HALF_UP을 써서 반올림을 해줄 수 있다.

2. 그냥 조건 보고 구현

만약 모듈 없이 일반 반올림을 구현하려면, 직접 조건을 확인하여 구현해야 한다.
소수점 몇 번째 자리에서 반올림 해야 하는 지 보고 해주면 된다.

아래 예시 코드는 소수점 첫째 자리에서 반올림을 하는 케이스.


def custom_round(number):
    if number - int(number) >= 0.5:
        return int(number) + 1
    else:
        return int(number)

소수점 자리 출력

사실 소수점 자리를 출력하는 데에는 정말 많은 방법이 있다.

%로 형식 지정자를 세팅해두거나, format 메서드를 쓰거나, f-string을 쓰거나...
근데 이번 포스팅은 내가 문제 풀 떄 컨닝 페이퍼 느낌으로 쓰려는 거니까
그냥 다 간단하게 다 때려 박았다.

1. 형식 지정자 사용


value = 3.14159265 
print("%.2f" %value)

2. format 메서드 사용

이 방식은 파이썬 2.7 버전 이상부터 사용 가능하다.
(근데 나는 ps할 때 보통 python3 쓰잖아)

value = 3.14159265
formatted_value = "{:.2f}".format(value)
print(formatted_value)  

3. f-string 사용

파이썬 3.6 이상에서는 f-문자열(f-string)을 사용하여 소수점 자리를 지정 가능하다.

value = 3.14159265
decimal_places = 2
formatted_value = f"{value:.{decimal_places}f}"
print(formatted_value)  # 출력: 3.14

근데 여기서 이렇게

소수점 자릿수를 지정해서 출력해 줄 때 유의할 점이 하나 더 있다.

~~킹받게도... 내가 얼마나 짜증났으면 글을 따로 써 진짜 ~~

파이썬에서 위와 같은 방법으로

소수점 자릿수를 지정하여 출력할 때,

자동으로 반올림이 적용된다.

이를테면, 아래 코드를 보자.


value = 3.156
formatted_value = round(value, 2) # 3.16
print("%.1f" %formatted_value)  # 출력: 3.2

소수 둘째 자리에서 반올림을 해서 3.16이 나왔다.
그런데 이걸 소수 첫쨰 자리까지 출력된다고 하면 3.2가 되어 버린다^ㅁ^...

사실 출력할 때 이런 일이 없게끔 아예 소수 몇 번째 자리까지인지 반올림한 후,
그 값을 변수로 받아서 그 변수 그대로를 형식 지정자 없이 출력해주면 되긴 한다.

여러분들을 잘 하시겠지만,
나는 너무나도... 이 소수점 다루는 거에 틀렸습니다.를 너무나도 많이 본 사람이라
미래의 나를 위해 정리해둔다 흑흑흑

profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

2개의 댓글

comment-user-thumbnail
2025년 1월 5일

저희는 일반 반올림을 사사오입이라고 부르기로 하였고,
파이썬은 오사오입입니다.
ex) 오사오입: 1.5->2, 2.5->2
ex) 사사오입: 1.5->2, 2.5->3

1개의 답글

관련 채용 정보