쇼핑몰의 DB 모델을 만들때 price에 무슨 자료형을 써야 할까 고민하다가 정리해본다.
- 가수를 1.bbb...b형식으로 표현할 수 있도록 지수를 조정한다.
- 가수를 표현할 때 bbb...b만 표현한다.
- 1은 항상 존재하기 때문에 저장할 필요가 없기 때문.
- 단, 숫자 0인 경우에는 사수를 모두 0으로 채운다.
부호+지수+가수 의 총 비트수는 32비트(4바이트)이다.
부호+지수+가수 의 총 비트수는 64비트(8바이트)이다.
데이터 및 파일 크기, 해석속도, 파일 생성 속도에 있어서 단정도가 유리하다.
정밀도에 있어서 배정도가 유리하다.
사람은 sqrt(2)나 π을 그냥 그대로 받아들일 수 있지만 컴퓨터는 숫자를 무조건 2진수로밖에 기록할 수 없다. 그래서 정수와 유리수는 정확하게 저장할 수 있지만 무리수의 경우 소수점 몇째짜리쯤에서 끊어서 거기까지밖에는 저장할 수 없다. 이렇게 잘려나간 뒷쪽 소수점 때문에 필연적으로 발생하는 오류를 truncation error 트렁케이션 에러(잘라내면서 생기는 오류) 혹은 round off error 라운드 오프 에러(반올림 하면서 생기는 오류) 라고 부른다.
즉, 컴퓨터로 실수를 동반한 계산을 하면 exact solution은 절대로 구할 수 없다. 아무리 정확하게 계산을 하더라도 truncation error 때문에 무조건 어느정도의 오차가 있는 해를 얻을 뿐이다.
그렇다면 결론은? 어떻게 하면 용인할 수 있는 수준으로 오차를 작게 할 수 있겠는가?
컴퓨터에서 실수를 나타내는 방법은 크게 두 가지가 있다. single precision 싱글 프리시젼과 double precision 더블 프리시젼이 바로 그것이다. quadruple precision 쿼드러플 프리시젼도 있기는 한데 보통은 double precision을 많이 쓴다.
...
통상 double precision이면 충분하다.
...
출처: https://qt3b1s62da6s.tistory.com/368 [이름이 없는 블로그]
결국 product 테이블의 price 컬럼은 DecimalField로 설정했다.