복붙노트

[MONGODB] MongoDB를 - 값의 진수 유형에 대한 무엇?

MONGODB

MongoDB를 - 값의 진수 유형에 대한 무엇?

나는 현재 학습과 작은 금융 관련 프로젝트에 대한 MongoDB를 적용하고 있습니다.

내가 작업에 MongoDB를 읽을 때, 그것은 말합니다 :

내 금융 관련 제품은 일부 통화 값을 포함 할 것이다, 그러나 나는 조금 혼동 또는 위의 진술에 대해 걱정입니다. 여기 내 질문이 있습니다 :

감사

해결법

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

    1.당신이 재정적 인 목적을 위해 정확한 표현을 원한다면, 두 배 또는 소수 부분이 오류를 반올림 될 수 있습니다로 부동 소수점 값은 적합하지 않다. 특정 소수 값은 바이너리 기반의 부동 소수점을 사용하여 표현 될 수없고 근사해야합니다.

    당신이 재정적 인 목적을 위해 정확한 표현을 원한다면, 두 배 또는 소수 부분이 오류를 반올림 될 수 있습니다로 부동 소수점 값은 적합하지 않다. 특정 소수 값은 바이너리 기반의 부동 소수점을 사용하여 표현 될 수없고 근사해야합니다.

    덜 기술 소개를 들어, 부동 소수점 숫자를 반올림의 문제점을 참조; 당신이 밖으로 괴짜 싶은 경우에, 부동 소수점 연산에 대해 어떻게 모든 컴퓨터 과학자한다 알고를 참조하십시오.

    정수형 (센트에 값을 저장하는)를 사용하는 추천 전위 라운딩 에러를 방지하는 것이다. 이 방법은 통화 데이터를 모델링에 대한 MongoDB를 문서에 "는 스케일 팩터를 사용"으로 설명하고 MongoDB를 3.2 및 이전 버전에 대한 일반적인 해결 방법입니다.

    MongoDB를 3.4 통화 데이터 필드를 조작하기위한 정확한 정밀도를 제공하는 새로운 진수 BSON 유형이 포함되어 있습니다.

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

    2.당신이 센트 값으로 통화를 저장하지 않는 경우, 당신은이 같은 개체로 $ 1.34의 통화를 저장할 수 :

    당신이 센트 값으로 통화를 저장하지 않는 경우, 당신은이 같은 개체로 $ 1.34의 통화를 저장할 수 :

    {
        major: 1,
        minor: 34,
        currency: "USD"
    }
    

    이 같은 객체와 어떤 수학을하는 것은 쉽지 않을 것입니다 및 상업 반올림 규칙을 사용하지 않을 것입니다. 그러나 당신은 MongoDB를 같은 "바보"데이터베이스입니다, 특히하지 않을 경우, 어쨌든 데이터베이스에있는 모든 비즈니스 로직을 수행해서는 안된다.

    당신이 일을해야하는 것입니다 직렬화 / 역 직렬화 서로 다른 통화 단위 ($ 12.34 + 14.95로 작업을 수행하려고 할 때 예외가 발생 구현 반올림 규칙을 존중하는 기본 통화 수학 연산을하고 응용 프로그램에서 돈 클래스 /에서 이러한 개체 € = 오류 -) 먼저 환율을 제공하여 다른 통화로 한 통화를 변환해야합니다.

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

    3.당신은 몽구스를 사용하는 경우 당신은 예를 들어, 스키마 정의에 게터 / 세터 기능을 사용할 수 있습니다

    당신은 몽구스를 사용하는 경우 당신은 예를 들어, 스키마 정의에 게터 / 세터 기능을 사용할 수 있습니다

    function getDecimalNumber(val) {    return (val/1000000); }
    function setDecimalNumber(val) {    return (val*1000000); }
    

    스키마 객체 등에 적용

    balance: { type: Number, default: 0, get: getDecimalNumber, set: setDecimalNumber },
    

    곱셈에 제로의 수는 /으로 나누기 원하는 정확도에 따라 달라집니다.

  4. ==============================

    4.이 글을 쓰는 시점에 단지 완성 된 개발하지만 MongoDB를 것 같은데 결국, 소수에 대한 지원을 추가했습니다, 그러나 희망은 곧 안정 버전에서 사용할 수 있어야합니다 (3.4?).

    이 글을 쓰는 시점에 단지 완성 된 개발하지만 MongoDB를 것 같은데 결국, 소수에 대한 지원을 추가했습니다, 그러나 희망은 곧 안정 버전에서 사용할 수 있어야합니다 (3.4?).

    https://jira.mongodb.org/browse/SERVER-1393

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

    5.MongoDB의 3.4 버전 소수점 데이터 유형에 대한 지원이 추가. 또한 쉘에서 사용할 수 있습니다.

    MongoDB의 3.4 버전 소수점 데이터 유형에 대한 지원이 추가. 또한 쉘에서 사용할 수 있습니다.

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

    6.이 게시물은 오래 알고 있지만 그렇게 구글에서 높은 순위를 ...

    이 게시물은 오래 알고 있지만 그렇게 구글에서 높은 순위를 ...

    MongoDB를 여기에 자신 http://docs.mongodb.org/v2.6/tutorial/model-monetary-data/#monetary-value-exact-precision에 의해 설명 된대로 재무 데이터를 저장하기위한 가장 좋은 방법은 정확한 정밀도를 사용하고 있습니다.

    {price: 9990, currency: "USD" }
    

    당신이 데이터를 필요로 할 때 그리고 당신이 2 자리의 정밀도를 원하는 가정 (100)으로 나눕니다. 단점은 항상 같은 정밀 작업을해야한다는 것입니다.

  7. from https://stackoverflow.com/questions/11541939/mongodb-what-about-decimal-type-of-value by cc-by-sa and MIT license