데이터베이스에 화폐 가치를 저장하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/618056

  •  03-07-2019
  •  | 
  •  

문제

데이터베이스에 몇 개의 돈 관련 필드를 저장해야하지만 그 사이에 사용할 데이터 유형이 확실하지 않습니다. 그리고 소수.

도움이 되었습니까?

해결책

소수점과 돈은 매우 신뢰할 수 있어야합니다. 내가 당신을 확신 할 수있는 것은 (상속 된 응용 프로그램의 고통스러운 개인적인 경험에서) 하지 마라 float를 사용하십시오!

다른 팁

나는 항상 소수점을 사용합니다. 전에 돈을 사용한 적이 없습니다.

최근 SQL Server에서 소수점 대 돈 데이터 유형에 관한 기사를 찾았습니다.

돈 대 소수점

또한 Money Datatype이 계산을 수행 할 때 항상 정확한 결과를 초래하지는 않습니다. 딸깍 하는 소리

내가 과거에 내가 한 일은 int 필드를 사용하고 양을 센트 (Eurocent / Dollarcent)로 저장하는 것입니다.

정밀도와 규모로 내려 오는 것 같아요. IIRC, money 4DP입니다. 괜찮다면 money 당신의 의도를 표현합니다. 더 많은 제어를 원한다면 사용하십시오 decimal 특정 정밀도와 규모로.

응용 프로그램에 따라 다릅니다 !!! 저는 금융 서비스에서 일하고 있는데, 우리는 일반적으로 가격이 지점 이후 5 진수 자리로 유의 한 것으로 간주합니다. 물론 3.12345pence/센트에서 2 백만을 구매할 때 상당한 금액입니다. 일부 응용 프로그램은이를 처리하기 위해 자체 SQL 유형을 제공합니다.

반면에 이것은 필요하지 않을 수 있습니다.u003CHumour> 계약자 요금은 항상 가장 가까운 £ 100로 반올림 된 것처럼 보였지만 현재 현재 신용 크런치에서 25 파운드가 가장 가까운 것으로 보입니다.u003C/Humour>

사용 가능한 데이터 유형을 기반으로 생각을 정렬하지 마십시오. 오히려 요구 사항을 분석 한 다음 어떤 데이터 유형이 가장 적합한 지 확인하십시오. 플로트는 플로팅 포인트 번호의 이진 버전을 저장할 때 아키텍처의 제한을 고려할 때 최악의 선택입니다. 돈은 표준 단위이며 돈 관련 운영을 처리하는 데 더 많은 지원을받을 것입니다. 10 진수의 경우, 당신은 각각과 모든 것을 처리해야하지만 소수점 유형을 처리하는 것은 당신만이 알고 있으므로 다른 두 데이터 유형으로 얻을 수있는 놀라움은 없습니다.

소수점을 사용하고 필요한 것보다 더 많은 자리를 사용하십시오. 돈은 계산에서 올바른 결과를 반환하지 않습니다. 어떠한 상황에서도 부족한 데이터 유형이므로 플로트 또는 실제를 사용하여 계산이 잘못 될 수 있으므로 (특히 더 복잡해지기 때문에).

플로트 값으로 인해 근사치 나 변경을 원하는 일부 데이터 (돈과 같은)의 경우, 데이터가 결코 '떠 다니지 않는지'확인해야합니다. 소수점의 양쪽에서 단단해야합니다.
안전한 방법 중 하나는 정수 데이터 유형으로 변환하여 가치를 평가하는 것입니다. 값을 되 찾는 동안 소수점이 적절한 위치에 배치되어 있는지 확인하십시오.
예를 들어
1. 데이터베이스에 $ 240.10을 절약합니다.
2. 그것을 순수한 적분 형태로 변환하십시오 : 24010 (당신은 단지 소수점의 변화를 알고 있습니다).
3. 적절한 소수점 상태로 되돌아갑니다. 오른쪽에서 2 위에 소수점을 배치하십시오. $ 240.10

따라서 Databse에있는 동안 견고한 정수 형태가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top