복붙노트

[SQL] 진수 컬럼에 돈을 저장 - 어떤 정밀도와 스케일?

SQL

진수 컬럼에 돈을 저장 - 어떤 정밀도와 스케일?

나는 데이터베이스에 돈 값을 저장하기 위해 진수 열을 사용하고, 오늘은 내가 사용에 어떤 정밀도와 스케일을 궁금 해서요.

고정 폭의 가정으로 문자 열이 더 효율적이기 때문에, 나는 진수 열에 대한 진실이 될 수 같은 생각을했다. 그것은인가?

그리고 무엇 정밀도와 스케일을 사용해야합니까? 나는 정밀 24/8를 생각했다. 충분히 또는 확인하지 그 잔인한 사람이 있습니까?

이것은 내가하기로 결정했습니다 것입니다 :

나는 그것을 참조 대부분이기 때문에 전환율을위한 플로트가 문제라고 생각하지 않습니다, 나는 어쨌든 진수로 캐스팅됩니다.

당신의 소중한 의견에 대한 여러분 모두 감사합니다.

해결법

  1. ==============================

    1.당신이 획일적을 찾고 있다면, 나는 (빠른 구글이 밖으로 곰) (19, 4) 인기있는 선택입니다 DECIMAL을 건의 할 것입니다. 나는 이전 VBA / 액세스 / 제트 통화 데이터 형식에서이 유래는, 언어의 첫 번째 고정 점 진수 형식 인 생각; 진수는 VB6 / VBA6 / 제트 4.0 (즉 완전히 구현되지 않음) '버전 1.0'스타일로왔다.

    당신이 획일적을 찾고 있다면, 나는 (빠른 구글이 밖으로 곰) (19, 4) 인기있는 선택입니다 DECIMAL을 건의 할 것입니다. 나는 이전 VBA / 액세스 / 제트 통화 데이터 형식에서이 유래는, 언어의 첫 번째 고정 점 진수 형식 인 생각; 진수는 VB6 / VBA6 / 제트 4.0 (즉 완전히 구현되지 않음) '버전 1.0'스타일로왔다.

    고정 소수점 소수점 값의 저장을위한 엄지 손가락의 규칙은 가게에 당신이 실제로 반올림을 허용하는 데 필요한 것보다 적어도 하나 이상의 10 곳입니다. 진수 선단에서 오래 통화 유형의 매핑을위한 이유 중 하나 (19, 4) 배면 단부의 형태는 절단에 의해 둥근 (P S) DECIMAL 반면, 본질적으로 둥근 저 통화 나타내 은행 '이었다.

    DECIMAL 스토리지에서 여분의 진수 장소는 사용자 지정 반올림 알고리즘이 구현이 아닌 공급 업체의 기본을 복용 할 수 있습니다 (그리고 은행 '반올림은 0에서 라운드 거리를 0.5로 끝나는 모든 값을 기대 디자이너를 들어, 적어도 말을, 놀라운됩니다 ).

    예, 진수 (24, 8) 소리는 나에게 과잉 좋아한다. 대부분의 통화는 네다섯 소수점에 인용된다. 나는 8 진수 규모 (또는 그 이상)가 필요합니다 상황을 알고 있지만, '정상'금액 (사 소수점 말은) 따라 감소한다 소수점 정밀도를 의미, 프로 rata'd있다 곳이다 (도 고려 이러한 상황에서 부동 소수점 형). 그리고 아무도 많은 돈을 요즘 (24)의 소수점 정밀도를 요구하는 것으로이 없습니다 :)

    그러나 오히려 획일적 인 접근 방식보다, 몇 가지 조사를 위해 수 있습니다. 막연하게되므로 저장 DECIMAL (p, 6)를 사용하여, 다섯 소수점 반올림에 대한 명시 적 규칙 일부 EU 내 상태 전송을 기억 GAAP, EU 등 I : 적용 할 수있다 회계 규칙에 대한 당신의 디자이너 또는 도메인 전문가에게 문의하십시오. 회계사는 일반적으로 네 개의 소수 자릿수를 선호하는 것 같다.

    등을 참조 아론 버트 랜드의 블로그 이동성과 같은 다른 고려 사항들, 반올림 때 PS 않도록 SQL 서버 MONEY 데이터 유형은 정확도와 함께 심각한 문제가 있기 때문이다.

    하드웨어 설계자가 선택했기 때문에 Microsoft 및 언어 디자이너는 은행원의 반올림을 선택했다 [표창장을?]. 그것은 예를 들어, 전기 전자 학회 (IEEE) 표준 연구소에 안치된다. 수학자를 선호하기 때문에 하드웨어 디자이너를 선택했다. 위키 백과를 참조하십시오; 의역에이 '컴퓨터의 규칙'(계산을 수행하는 사람을 의미하는 "컴퓨터")라는 오류의 확률 및 이론의 1906 판.

  2. ==============================

    2.우리는 최근의 요구가 여러 통화와 그들 사이의 변환에 값을 처리 할 수있는 시스템을 구축하고, 몇 가지에서 하드 방법을 생각.

    우리는 최근의 요구가 여러 통화와 그들 사이의 변환에 값을 처리 할 수있는 시스템을 구축하고, 몇 가지에서 하드 방법을 생각.

    돈을 결코 사용 부동 소수점 숫자

    그들이 뭔가를 망쳐 때까지 발견되지 않을 수 있습니다 소수점 산술 소개합니다 부정확성 부동. 모든 값은 하나의 정수로 저장 또는 고정 소수점 유형, 당신은 고정 소수점 형식을 사용하도록 선택하는 경우 다음 당신이 정확히 유형은 후드 아래에 무엇을 (즉, 내부적으로 정수 또는 부동 소수점을 사용합니까 이해하도록해야한다 유형).

    당신은 계산 또는 전환을 할 필요가 작업을 수행 할 때 :

    3 단계에서 정수로 부동 소수점 숫자 등을 변환 할 때, 그냥 캐스팅하지 않습니다 - 먼저 반올림하는 수학 함수를 사용합니다. 특별한 경우가 바닥이나 천장을 만들다가 될 수 있지만 이것은 일반적으로 라운드 할 것이다. 차이를 알고 조심스럽게 선택합니다.

    값과 함께 숫자의 유형을 저장

    당신은 하나 개의 통화를 처리하는 경우 이것은 당신을위한 중요하지 않을 수 있지만, 여러 통화를 처리하기에 우리에게 중요했다. 우리는 같은 통화의 3 문자 코드를 사용 USD, GBP, JPY, EUR 등

    상황에 따라, 또한 가게에 도움이 될 수 있습니다 :

    당신이 상대하고있는 숫자의 정확성의 경계를 알고

    실제 값의 경우, 통화의 가장 작은 단위로 정확한으로되고 싶어요. 이 방법 당신은 센트, 페니, 아무 이유없이보다 높은 정확도로 값을 저장하지 마십시오 엔하는 다이어트 등보다 작은 값이없는.

    내부적으로, 당신은 통화 가치의 다른 유형의 경우 더 작은 값을 처리하도록 선택할 수 있습니다. 확인 코드는하고 그들을 혼합하지 않는 알고있다. 심지어 여기에 부동 소수점 값을 사용하지 마십시오.

    함께 모든 규칙을 추가, 우리는 다음과 같은 규칙을 결정했다. 코드를 실행에서, 통화는 가장 작은 단위의 정수를 사용하여 저장된다.

    class Currency {
       String code;       //  eg "USD"
       int value;         //  eg 2500
       boolean converted;
    }
    
    class Price {
       Currency grossValue;
       Currency netValue;
       Tax taxRate;
    }
    

    데이터베이스에서 값은 다음과 같은 형식의 문자열로 저장됩니다

    USD:2500
    

    즉 저장 $ 25.00의 값입니다. 우리는 그렇게 할 수 있었던 유일한 모든 값이 첫번째 메모리로 변환 할 수 있도록 통화와 거래, 데이터베이스 계층 자체 내에서 할 필요가 없다는 코드 때문이다. 다른 상황은 의심의 여지가 다른 솔루션에 자신을 빌려 것입니다.

    그리고 경우에 나는 플로트를 사용하지 않는, 그 이전에 취소하지 않았다!

  3. ==============================

    3.MySQL의에 돈을 취급 할 때 당신은 당신의 돈 값의 정밀도를 모르거나 DOUBLE를 사용하는 경우, 사용 DECIMAL (13,2)는 당신이 그냥 빨리 좋은만큼 대략적인 값을 원하는 경우. 핸들 돈 애플리케이션 요구 조 달러 (또는 유로 또는 파운드)까지 값한다면, 다음이 작동합니다 :

    MySQL의에 돈을 취급 할 때 당신은 당신의 돈 값의 정밀도를 모르거나 DOUBLE를 사용하는 경우, 사용 DECIMAL (13,2)는 당신이 그냥 빨리 좋은만큼 대략적인 값을 원하는 경우. 핸들 돈 애플리케이션 요구 조 달러 (또는 유로 또는 파운드)까지 값한다면, 다음이 작동합니다 :

    DECIMAL(13, 2)
    

    당신이 회계 기준을 준수해야하는 경우 또는, 다음 사용

    DECIMAL(13, 4)
    
  4. ==============================

    4.4 소수점은 당신에게 세계에서 가장 작은 통화 하위 단위를 저장하는 정확성을 줄 것입니다. 당신이 (?! nanopayment) 정확도 소액을해야하는 경우가 더 내려 걸릴 수 있습니다.

    4 소수점은 당신에게 세계에서 가장 작은 통화 하위 단위를 저장하는 정확성을 줄 것입니다. 당신이 (?! nanopayment) 정확도 소액을해야하는 경우가 더 내려 걸릴 수 있습니다.

    내가 너무 DBMS 고유의 돈 유형 DECIMAL을 선호, 당신은 응용 프로그램의 로직의 종류가 IMO 안전 유지입니다. 동일한 라인을 따라 또 다른 방법은 애플리케이션 레벨에서 수행 가독성 (¤ = 현재 심볼)에 대한 ¤unit.subunit 포맷으로 A [긴] 정수를 사용하는 것입니다.

  5. ==============================

    5.SQL 서버에 돈을 데이터 형식은 소수점 이하 네 자리 숫자가 있습니다.

    SQL 서버에 돈을 데이터 형식은 소수점 이하 네 자리 숫자가 있습니다.

    2000 온라인 SQL 서버에서 :

    통화 데이터는 돈의 양 또는 음의 양을 나타냅니다. 마이크로 소프트 SQL 서버 ™ 2000, 통화 데이터는 돈과 smallmoney 데이터 유형을 사용하여 저장됩니다. 통화 데이터는 네 개의 소수 자릿수의 정확도로 저장할 수 있습니다. +922,337,203,685,477.5807 통해 -922,337,203,685,477.5808의 범위의 값을 저장하도록 화폐 데이터 유형을 사용하여 (a 값을 저장하기 위해 8 바이트를 요구한다). 214,748.3647 통해 -214,748.3648의 범위의 값을 저장하는 smallmoney 데이터 유형을 사용하여 (a 값을 저장하기 위해 4 바이트를 요구한다). 소수점의 큰 번호가 필요한 경우, 대신 소수점 데이터 형식을 사용합니다.

  6. ==============================

    6.때때로 당신은 한 푼도 미만으로 이동하여 매우 큰 demoniations를 사용하여 국제 통화가 필요합니다. 예를 들어, 당신은 당신의 고객에게 거래 당 0.088 센트를 청구 할 수 있습니다. 내 오라클 데이터베이스의 열 번호로 (20,4)를 정의

    때때로 당신은 한 푼도 미만으로 이동하여 매우 큰 demoniations를 사용하여 국제 통화가 필요합니다. 예를 들어, 당신은 당신의 고객에게 거래 당 0.088 센트를 청구 할 수 있습니다. 내 오라클 데이터베이스의 열 번호로 (20,4)를 정의

  7. ==============================

    7.당신은 DB에 산술 연산의 모든 종류의 일을 할 거라면 같은 이유로, 제안, 여기 사람들보다 더 많은 정밀도를 원하는 아마 것이다된다 (요금 청구 등 밖으로 곱) 당신은 결코 좋겠 응용 프로그램 코드에서 부동 소수점 값 배정 밀도보다 적은 것을 사용하고 싶습니다.

    당신은 DB에 산술 연산의 모든 종류의 일을 할 거라면 같은 이유로, 제안, 여기 사람들보다 더 많은 정밀도를 원하는 아마 것이다된다 (요금 청구 등 밖으로 곱) 당신은 결코 좋겠 응용 프로그램 코드에서 부동 소수점 값 배정 밀도보다 적은 것을 사용하고 싶습니다.

  8. ==============================

    8.당신은 IBM 인포믹스 다이나믹 서버를 사용한다면, 당신은 DECIMAL 또는 NUMERIC 형에 약간의 변형 인 돈 유형을 가질 것이다. (십진수는 부동 소수점 형이 될 수있는 반면)는 항상 고정 소수점 형식이다. 당신은 1에서 32까지 규모를 지정하고, 0 ~ 32 (16의 규모와 2의 정밀도로 디폴트)에서 정밀 할 수 있습니다. 가장 가까운 센트에, 미국 연방 적자를 개최 아직도 충분히 큰 - - 그래서, 당신은 가게에 필요에 따라, 당신은 DECIMAL (16,2)를 사용할 수 있습니다 또는 당신은 작은 범위, 또는 더 많은 소수점을 사용할 수 있습니다.

    당신은 IBM 인포믹스 다이나믹 서버를 사용한다면, 당신은 DECIMAL 또는 NUMERIC 형에 약간의 변형 인 돈 유형을 가질 것이다. (십진수는 부동 소수점 형이 될 수있는 반면)는 항상 고정 소수점 형식이다. 당신은 1에서 32까지 규모를 지정하고, 0 ~ 32 (16의 규모와 2의 정밀도로 디폴트)에서 정밀 할 수 있습니다. 가장 가까운 센트에, 미국 연방 적자를 개최 아직도 충분히 큰 - - 그래서, 당신은 가게에 필요에 따라, 당신은 DECIMAL (16,2)를 사용할 수 있습니다 또는 당신은 작은 범위, 또는 더 많은 소수점을 사용할 수 있습니다.

  9. ==============================

    9.나는 큰 부분을 위해 또는 고객의 요구 사항은 사용에 어떤 정밀도와 스케일 지시해야한다고 생각합니다. 예를 들어, 전자 상거래 웹 사이트 내가 GBP에서 돈이 거래 작업입니다 만, 나는 진수 (6, 2)로 유지하는 데 필요한되고있다.

    나는 큰 부분을 위해 또는 고객의 요구 사항은 사용에 어떤 정밀도와 스케일 지시해야한다고 생각합니다. 예를 들어, 전자 상거래 웹 사이트 내가 GBP에서 돈이 거래 작업입니다 만, 나는 진수 (6, 2)로 유지하는 데 필요한되고있다.

  10. ==============================

    10.여기에 늦은 대답은,하지만 난 사용했습니다

    여기에 늦은 대답은,하지만 난 사용했습니다

    DECIMAL(13,2)
    

    나는 99,999,999,999.99 개까지 허용해야 사고 괜찮아있다.

  11. from https://stackoverflow.com/questions/224462/storing-money-in-a-decimal-column-what-precision-and-scale by cc-by-sa and MIT license