Decimal 데이터 형식(Visual Basic)

10의 가변 배율로 스케일링된 96비트(12바이트) 정수 숫자를 표시하는 서명된 128비트(16바이트) 값을 보유합니다. 스케일링 인수는 소수점 오른쪽의 자릿수를 지정합니다. 범위는 0에서 28까지입니다. 스케일링이 0인 경우(소수 자릿수 없음) 가능한 가장 큰 값은 +/-79,228,162,514,264,337,593,543,950,335(+/-7.9228162514264337593543950335E+28)입니다. 소수 자릿수가 28개인 경우 가장 큰 값은 +/-7.9228162514264337593543950335이며, 0이 아닌 가장 작은 값은 +/-0.0000000000000000000000000001(+/-1E-28)입니다.

설명

Decimal 데이터 형식은 숫자의 최대 유효 숫자를 제공합니다. 이는 최대 29개의 유효 숫자를 지원하며 7.9228 x 10^28을 초과하는 값을 나타낼 수 있습니다. 많은 숫자가 필요하지만 반올림 오류를 허용할 수 없는 재무와 같은 계산에 특히 적합합니다.

Decimal의 기본값은 0입니다.

프로그래밍 팁

  • 정밀도. Decimal은 부동 소수점 데이터 형식이 아닙니다. Decimal 구조체는 부호 비트와 값의 소수 부분을 지정하는 정수 스케일링 인수와 함께 이진 정수 값을 보유합니다. 이 때문에 Decimal 숫자는 부동 소수점 형식(SingleDouble)보다 메모리에서 더 정확한 표현을 가집니다.

  • 성능. Decimal 데이터 형식은 모든 숫자 형식 중 가장 느립니다. 데이터 형식을 선택하기 전에 성능에 대한 정밀도의 중요성을 고려해야 합니다.

  • 확장. Decimal 데이터 형식은 Single 또는 Double로 확장됩니다. 이는 System.OverflowException 오류 발생 없이 Decimal을 이러한 형식 중 하나로 변환할 수 있음을 의미합니다.

  • 후행 0. Visual Basic은 후행 0을 Decimal 리터럴에 저장하지 않습니다. 그러나 Decimal 변수는 계산으로 획득한 후행 0을 유지합니다. 다음 예제에서는 이것을 보여 줍니다.

    Dim d1, d2, d3, d4 As Decimal
    d1 = 2.375D
    d2 = 1.625D
    d3 = d1 + d2
    d4 = 4.000D
    MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) &
          ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))
    

    이전 예제의 MsgBox 출력은 다음과 같습니다.

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • 형식 문자. 리터럴 형식 문자 D를 리터럴에 추가하면 Decimal 데이터 형식이 됩니다. 식별자 형식 문자 @를 식별자에 추가하면 Decimal가 됩니다.

  • 프레임워크 형식. .NET Framework에서 해당하는 형식은 System.Decimal 구조체입니다.

범위

Decimal 변수 또는 상수에 큰 값을 할당하려면 D 형식 문자를 사용해야 할 수 있습니다. 이 요구 사항은 다음 예제와 같이 리터럴 형식 문자가 리터럴을 따르지 않는 한 컴파일러가 리터럴을 Long으로 해석하기 때문입니다.

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

bigDec1에 대한 선언은 할당된 값이 Long에 대한 범위 내에 속하기 때문에 오버플로를 생성하지 않습니다. Decimal 변수에 Long 값을 할당할 수 있습니다.

bigDec2에 대한 선언은 할당된 값이 Long에 대해 너무 커서 오버플로 오류를 생성합니다. 숫자 리터럴은 먼저 Long으로 해석될 수 없으므로 Decimal 변수에 할당할 수 없습니다.

bigDec3의 경우 리터럴 형식 문자 D는 컴파일러가 리터럴을 Long 대신 Decimal로 해석하도록 강제하여 문제를 해결합니다.

참고 항목