source

백분율 값을 유지하기 위한 적절한 데이터 유형?

ittop 2023. 5. 7. 11:49
반응형

백분율 값을 유지하기 위한 적절한 데이터 유형?

0.00% ~ 100.00% 범위의 백분율 값을 유지하는 데 가장 적합한 데이터 유형은 무엇입니까?

백분율에 소수점 두 자리가 있다고 가정하면 사용하는 데이터 유형은 백분율을 저장하는 방법에 따라 달라집니다.

  • 그들의 분수 등가물(예: 100.00%가 1.0000으로 저장됨)을 저장할 경우, 나는 데이터를 다음과 같이 저장할 것입니다.decimal(5,4)데이터 유형(aCHECK값이 1.0000(상한)을 초과하지 않고 0(바닥) 아래로 떨어지지 않도록 하는 제약 조건.
  • 얼굴 값을 저장하려면(예: 100.00%가 100.00으로 저장됨) 다음을 사용해야 합니다.decimal(5,2)적절한CHECK속박

좋은 열 이름과 결합하여 다른 개발자에게 데이터가 무엇인지, 데이터가 열에 저장되는 방식을 명확하게 합니다.

  • 로 보관decimal.
  • 범위를 제한하려는 경우(예: 0 - 100%, 경우에 따라 100%를 초과하거나 잠재적으로 음의 값까지 포함해야 하는 타당한 이유가 있을 수 있음) 체크 제약 조건을 추가합니다.
  • 값 1을 100%, 0.5를 50% 등으로 처리합니다.이렇게 하면 모든 산술 연산이 예상대로 작동할 수 있습니다(값 100을 100%로 사용하는 것과 반대).
  • 필요에 따라 정밀도 및 스케일 조정(괄호 안에 있는 두 값)columnName decimal(precision, scale)Precision은 숫자에 포함될 수 있는 총 자릿수를 말합니다. 척도는 소수점 다음에 있는 자릿수를 나타냅니다.decimal(3,2)로 나타낼 수 있는 숫자입니다.#.##;decimal(5,3)되지요##.###.
  • decimal그리고.numeric본질적으로 같은 것입니다.하지만decimalANSI를 준수하므로 별도의 지시가 없는 한 항상 사용하십시오(예: 회사의 코딩 표준).

예제 시나리오

  • 당신의 경우(0.00% ~ 100.00%) 당신이 원하는 경우decimal(5,4).
  • 가장 일반적인 경우(0% ~ 100%)에 대해 원하는 경우decimal(3,2).
  • 위의 두 가지에서, 검사 제약 조건은 동일합니다.

예:

if object_id('Demo') is null
create table Demo
    (
        Id bigint not null identity(1,1) constraint pk_Demo primary key
        , Name nvarchar(256) not null constraint uk_Demo unique 
        , SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1)
        , SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1)
    )

추가 읽기:

저는 Thomas의 의견에 동의하며 적어도 WPF 애플리케이션에 대해서는 DECIMAL(5,4) 솔루션을 선택할 것입니다.

MSDN 숫자 형식 문자열을 보고 이유를 확인하십시오. http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString

백분율("P") 형식 지정자는 숫자에 100을 곱하여 백분율을 나타내는 문자열로 변환합니다.

그러면 XAML 코드에서 다음을 사용할 수 있습니다.

DataFormatString="{}{0:P}"

소수점 이하 두 자리가 정밀도 수준이면 "smallint"는 가장 작은 공간(2바이트)에서 이를 처리합니다.백분율에 100을 곱한 값을 저장합니다.

편집: 십진수 유형이 더 적합할 수 있습니다.그러면 수동으로 확장할 필요가 없습니다.값당 5바이트가 필요합니다.

n의 분해능이 1.00으로 반올림하기에 충분한 경우 숫자(n,n)를 사용합니다.예를 들어:

declare @discount numeric(9,9)
    , @quantity int
select @discount = 0.999999999
    , @quantity = 10000

select convert(money, @discount * @quantity)

언급URL : https://stackoverflow.com/questions/2762302/appropriate-datatype-for-holding-percent-values

반응형