복붙노트

[SQL] SQL Server의 숫자, 부동 소수점과 소수의 차이

SQL

SQL Server의 숫자, 부동 소수점과 소수의 차이

나는 구글에서 검색하고 하나가되는 상황에서 사용해야 할 찾아도 숫자, 부동 소수점 및 소수점 데이터 유형과의 차이를 이삭을 소수점 및 숫자 및 SQL Server 도우미를 방문했다.

(예를 들어, 급여 필드) 금융 거래의 모든 종류의 경우, 어느 쪽이 선호 왜?

해결법

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

    1.소수에 의해 제공되는 정밀도가 중요하고 비정상적인 행동과 대략적인 숫자 유형의 문제를 다루는 플로트의 [10E38 ~ 38 자리] 전화 번호가에 들어갈 수 있다면, 작은 저장 공간 (그리고 어쩌면 속도)되지 그래서 일반적으로 때문에 없습니다 허용 가능한 소수를 일반적으로 사용한다.

    소수에 의해 제공되는 정밀도가 중요하고 비정상적인 행동과 대략적인 숫자 유형의 문제를 다루는 플로트의 [10E38 ~ 38 자리] 전화 번호가에 들어갈 수 있다면, 작은 저장 공간 (그리고 어쩌면 속도)되지 그래서 일반적으로 때문에 없습니다 허용 가능한 소수를 일반적으로 사용한다.

    더 유용한 정보

    주요 출처 : MCTS Self-Paced 교육 키트 (시험 70-433) : 마이크로 소프트 SQL Server® 2008 데이터베이스 개발 - 제 3 장 - 테이블, 데이터 유형 및 선언적 데이터 무결성 레슨 1 - 선택 데이터 형식 (가이드 라인) - 페이지 93

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

    2.MSDN에서 가이드 라인 : 소수점, 부동 소수점 및 실제 데이터를 사용하여

    MSDN에서 가이드 라인 : 소수점, 부동 소수점 및 실제 데이터를 사용하여

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

    3.아니 완벽한 대답하지만, 유용한 링크 :

    아니 완벽한 대답하지만, 유용한 링크 :

    "나는 자주 진수 값에 대한 계산을한다. 어떤 경우에는 소수점 값을 캐스팅하기 전에 어떤 계산에 더 나은 정확도를 얻을 수, 빨리 떠."

    http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx

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

    4.진수와 숫자가 같은 기능적으로하지만 경우에 따라 중요 할 수있는 데이터 유형의 우선 순위는 여전히 존재한다.

    진수와 숫자가 같은 기능적으로하지만 경우에 따라 중요 할 수있는 데이터 유형의 우선 순위는 여전히 존재한다.

    SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')
    

    이 데이터 유형에 우선 걸리므 결과 데이터 타입은 숫자이다.

    우선 순위에 의한 데이터 유형의 완전한 목록 :

    참조 링크

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

    5.플로트 가변 정밀도를 갖는다는 고정 소수점 정밀도를 갖는다.

    플로트 가변 정밀도를 갖는다는 고정 소수점 정밀도를 갖는다.

    편집 (전체 질문을 읽지 못했습니다) 플로트 (53) (일명 실제) SQL Server에서 배정 밀도 32 비트 부동 소수점 숫자입니다. 일반 부동 소수점 수를 단 정밀도 부동이다. 이중 계산의 많은에 대한 정밀도와 simplicty의 좋은 조합입니다. 136 비트까지 - - 당신은 십진수로 매우 높은 정밀도 번호를 생성 할 수 있습니다하지만 당신은 당신이 제대로 그래서 숫자의 필요한 수의 모든 중간 계산을 포함 할 수 귀하의 정밀도와 스케일을 정의하는 것이 조심해야합니다.

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

    6.플로트는 대략 수 데이터 타입, 데이터 타입의 범위 내의 모든 값을 정확하게 표현할 수있는 방법이다.

    플로트는 대략 수 데이터 타입, 데이터 타입의 범위 내의 모든 값을 정확하게 표현할 수있는 방법이다.

    소수 / 숫자가 고정 정밀도 된 데이터 형식의 범위 내의 모든 값을 정확히 정밀 스케일로 표현 될 수 있다는 것을 의미한다 데이터 유형. 당신은 돈을 절약을 위해 소수를 사용할 수 있습니다.

    float로 진수 또는 숫자로 변환하면 정밀도가 일부 손실이 발생할 수 있습니다. 소수 또는 숫자 데이터 유형의 경우, SQL Server는 다른 데이터 유형으로 정밀도와 스케일의 각 특정 조합을 고려한다. DECIMAL (2,2) 및 DECIMAL (2,4)는 서로 다른 데이터 유형. 이 플로트의 경우에는 해당되지 않습니다하지만이 방법은 11.22 및 11.2222는 다른 종류의 것을. FLOAT (6) 및 11.22 11.2222은 동일한 데이터 유형이다.

    또한 돈을 절약 돈 데이터 형식을 사용할 수 있습니다. 이 돈을 위해 4 자리 정밀도 기본 데이터 형식입니다. 대부분의 전문가들은 돈을 절약을 위해이 데이터 유형을 선호한다.

    참고 1 이 삼

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

    7.무엇 기본 필요?

    무엇 기본 필요?

    그것은 궁극적으로 컴퓨터가 바이너리 형식으로, 내부적으로 숫자를 표현 사실에서 발생한다. 즉, 리드, 필연적으로, 반올림 오류로.

    이걸 고려하세요:

    0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")
    

    상기 생략 [...] 수단 '무한'. 당신이주의 깊게 보면, 무한 반복 패턴이있다 (= '0011')

    그래서, 어떤 시점에서 컴퓨터가 그 값을 반올림한다. 부정확하게 저장되어있는 숫자의 반복 사용에서 파생 축적 오류이 리드.

    당신이 (소수 부분이있을 수 있습니다 숫자) 금융 양을 저장할 말한다. 우선, 당신은 (정수는 소수 부분이없는) 분명히 정수를 사용할 수 없습니다. 보기의 순수 수학적인 관점에서, 자연적인 경향이 float를 사용하는 것입니다. 은 "가수"- - 제한하지만, 컴퓨터에, 수레는 소수점 뒤에 위치 숫자의 부분이있다. 그 반올림 오류로 리드.

    이 문제를 극복하기 위해, 컴퓨터 진수 번호를 컴퓨터에 이진 반올림 오류를 제한하는 특정 데이터 유형을 제공합니다. 이러한 데이터 유형이 있습니다 절대적으로 금융 양을 나타내는 데 사용되어야한다. 이러한 데이터 유형은 일반적으로 소수의 이름으로 이동합니다. 즉, 예를 들어, C #의 경우입니다. 또는, 대부분의 데이터베이스에서 DECIMAL.

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

    8.문제는 돈을 포함하지 않았더라도 데이터는이 스레드를 통해 오는 어떤 사람들은 재무 계산에 대한 MONEY 데이터 유형을 사용하도록 유혹 할 수있는 입력합니다.

    문제는 돈을 포함하지 않았더라도 데이터는이 스레드를 통해 오는 어떤 사람들은 재무 계산에 대한 MONEY 데이터 유형을 사용하도록 유혹 할 수있는 입력합니다.

    돈 데이터 형식을주의, 그것은 제한된 정밀도입니다.

    이 유래 질문에 대한 답변에 대한 좋은 정보가 많이있다 :

    당신은 SQL Server의 돈 또는 DECIMAL (x, y)의 데이터 유형을 선택해야합니까?

  9. from https://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server by cc-by-sa and MIT license