알고리즘

Python(파이썬) round 함수 반올림 오류 해결, format 반올림, 0.5 반올림

allkites 2021. 7. 13. 18:17

내가 계속 까먹어서 기록해 놓는 파이썬 소숫점 표현방법!

알고리즘 문제를 풀다보면 대부분 반올림을 써야하는데 익히 알고 있는 round를 쉽게 쓴다.

하지만 round에는 큰 허점이 있어서 다른 방법을 사용해야 하는데 아직은 사용할 때마다 긴가민가 하다...

 

1. 반올림, 올림, 내림

일반적인 반올림에는 round를 사용한다.
올림과 내림의 경우 ceil(올림), floor(내림)을 사용한다.

round(1.234, 2) # 반올림, 소숫점 2번째 자리까지 표시(1.23)


import math

math.ceil  # 올림
math.floor  # 내림

 

2. round 함수의 문제점

하지만 round 함수의 경우 자릿수를 표시해주는 '0'에 대해서는 문제가 발생한다.

print(round(1.000, 2))  # 1.00이 아닌 1.0이 출력

 

0.5의 반올림(올림과 내림의 차이가 동일한 경우)에서 짝수 값으로 반올림한다.

print(round(1.5))  # 2
print(round(2.5))  # 2

 

3. round 대신 format

format을 사용하면 이런 문제를 해결할 수 있다.

{:.2f}를 사용해 소숫점 아래 자릿수를 나타낼 수 있다. 

print('{}'.format(1.000, 2))  # 1.0

print('{:.2f}'.format(1.000))  # 1.00

 

4. 0.5 반올림 하는 방법

0.5를 반올림 하기 위해서는 직접 함수를 만들거나 decimal모듈을 사용하는 방법이 있다

함수

def roundUp(num):
    if (num - int(num)) >= 0.5:
        return int(num) + 1
    else:
        int(num)


print(roundUp(2.5))  # 3

Decimal

import decimal

context = decimal.getcontext()
context.rounding = decimal.ROUND_HALF_UP

print(round(decimal.Decimal('2.5'), 0))  # 3