코딩테스트/Python
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