IT story

PostgreSQL : 통화에 어떤 데이터 유형을 사용해야합니까?

hot-time 2020. 8. 5. 07:42
반응형

PostgreSQL : 통화에 어떤 데이터 유형을 사용해야합니까?


여기에Money 설명 된 것처럼 유형이 권장되지 않는 것 같습니다

응용 프로그램에서 통화를 저장해야하는데 어떤 데이터 형식을 사용해야합니까? 숫자, 돈 또는 플로트?


강제 2 단위 정밀도의 숫자 입니다. 통화를 나타 내기 위해 데이터 유형과 같은 플로트 또는 플로트를 사용하지 마십시오. 재무 보고서의 최종 수치가 + 또는-몇 달러 정도 틀리면 사람들이 불행해질 수 있기 때문에 통화를 표현하지 마십시오.

내가 알 수있는 한 돈 유형은 역사적인 이유로 남아 있습니다.


귀하의 출처는 공식적인 것이 아닙니다. 그것은 2011 년으로 거슬러 올라가며 저자조차 인식하지 못합니다. 머니 유형이 "감지 된"경우 PostgreSQL은 매뉴얼에서 그렇지 않다고 말합니다 .

더 공식적인 소스 를 얻으 려면 D' Arcy JM Cain (돈 유형의 원래 저자) 및 Tom Lane을 포함한 핵심 개발자의 진술과 함께 pgsql-general (이 주만에!) 에서이 스레드를 읽으십시오 .

기본적으로 money(제한적) 용도가 있습니다. 장점 numeric성능 입니다.

decimalnumericPostgres 의 별칭입니다 .

최근 릴리스의 개선 사항에 대한 관련 답변 및 의견!

개인적으로 저는 통화를 integer센트 나타내는 것으로 저장하고 싶습니다 . 그것은 언급 된 다른 옵션보다 효율적입니다.


당신의 선택은 :

  1. integer: 금액을 센트 단위로 저장하십시오. 이것이 EFTPOS 트랜잭션이 사용하는 것입니다.
  2. decimal(12,2): 정확히 소수점 이하 두 자리로 금액을 저장하십시오. 가장 일반적인 원장 소프트웨어가 사용하는 것입니다.
  3. float: 끔찍한 아이디어-부적절한 정확도. 이것은 순진한 개발자가 사용하는 것입니다.

옵션 2는 가장 일반적이고 사용하기 가장 쉬운 방법입니다. 본인에게 가장 적합한 최대 또는 작은 정밀도 (예제에서 12 자리, 모두 12 자리를 의미)로 만드십시오.

계산 결과 인 여러 트랜잭션 (예 : 환율 포함)을 비즈니스 의미가있는 단일 값으로 집계하는 경우 정확한 매크로 값을 제공하려면 정밀도가 높아야합니다. decimal(18, 8)합계가 정확하고 개별 값을 표시하기 위해 센트 정밀도로 반올림 할 수있는 것과 같은 것을 사용하는 것이 좋습니다.


모든 화폐 필드를 다음과 같이 유지합니다.

numeric(15,6)

소수점 이하 자릿수가 많으면 과도하게 보일 수 있지만, 아주 적은 기회라도 여러 통화를 처리해야 할 경우 변환을 위해 많은 정밀도가 필요합니다. 사용자에게 무엇을 제시하든 항상 미국 달러로 저장합니다. 이렇게하면 관련된 요일의 전환율을 고려하여 다른 통화로 쉽게 전환 할 수 있습니다.

하나의 통화 이외의 작업을 수행하지 않으면 최악의 점은 0을 저장하기 위해 약간의 공간을 낭비한다는 것입니다.


로 저장된 64 비트 정수를 사용하십시오. bigint

마이크로 달러 (또는 유사한 주요 통화)를 사용하는 것이 좋습니다. 마이크로는 백만 분의 1을 의미하므로 1 마이크로 달러 = $ 0.000001입니다.

  • 센트의 분수를 처리하기에 충분한 정밀도.
  • 매우 작은 단위당 가격 (광고 노출 또는 API 비용)에 적합합니다.
  • 사용이 간편하고 모든 언어와 호환됩니다.
  • 문자열 또는 숫자보다 저장 용 데이터 크기가 더 작습니다.
  • 계산을 통해 정확성을 유지하고 최종 출력에서 ​​반올림을 적용하기 쉽습니다.

참고 URL : https://stackoverflow.com/questions/15726535/postgresql-which-datatype-should-be-used-for-currency

반응형