[Python] round() 함수 주의사항!


서론

이 장은 파이썬 round함수에서 사용되는 round half to even방식에 대해 설명한다. 그리고 반올림에 대한 문제를 해결하기 위한 방안을 제시한다.

목차

  1. Round

Round

파이썬에서 round 방식은 round half to even 방식을 사용한다.이는 부동 소수점 연산의 특성 때문에 항상 우리가 예상했던데로 반올림이 성공하지 않는다.

2.675라는 숫자는 실제로 부동 소수점 연산에서 완벽하게 표현되지 않는다는 점이다. IEEE 754 부동소수점 표준에 따라, 2.675는 실제로는 2.6749999999999998로 표현된다.

따라서 round(2.675, 2)를 수행하면 실제로는 round(2.6749999999999998, 2)를 수행하는 것이 되며, 이 결과는 2.67이 된다.

  • 일반적인 경우
    print(round(3.6))

    에 대한 결과는 예상했던 것처럼 4가 나온다. 하지만 소수점이 5일때는 좀 다르다.

  • 기대와 다른 경우
    print(round(2.675, 2))

    에 대한 결과는 2.67이 나온다.

이는 부동소수점에 대한 특징임으로 다음과 같은 방법으로 고칠 수 있다.

from decimal import Decimal
print(round(Decimal('2.675'), 2))

다음과 같은 라이브러리를 사용하면 2.68이 나온다.