ML

파이썬 부동소수점 문제 회피하기

오즈마스터 2022. 5. 18. 14:25

파이썬에도 지긋지긋한 부동소수점 문제가 당연히 존재한다. 예를 들면,

def func(x):
  return x - 0.1

func(1.2
 
이것의 결과값은 1.1 이 나와야 하지만 실제로는 1.0999999999999999 가 출력된다. 
 
 
Decimal 모듈을 사용하여 해결한다.
from decimal import Decimal
def func(x):    
  return float(Decimal(str(x)) - Decimal(str(0.1)))

func(1.2)

주의할 것은, Decimal() 인자에 float 를 직접 넣으면 같은 오류가 발생하니까 의미가 없고 string 타입으로 변환해야 한다는 것.