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
숫자는 부동 소수점 형식(Single
및Double
)보다 메모리에서 더 정확한 표현을 가집니다.성능.
Decimal
데이터 형식은 모든 숫자 형식 중 가장 느립니다. 데이터 형식을 선택하기 전에 성능에 대한 정밀도의 중요성을 고려해야 합니다.확장.
Decimal
데이터 형식은Single
또는Double
로 변환할 수 있으며, 이 과정에서 System.OverflowException 오류가 발생하지 않습니다. 그러나 이 변환은 정밀도 유지보다 더 큰 값을 수용하는 데 우선 순위를정밀도 손실될 수 있습니다.
Dim decimalValue As Decimal = 1234567890123456789012345D
Dim doubleValue As Double = CDbl(decimalValue)
Console.WriteLine("Decimal value: " & decimalValue)
Console.WriteLine("Double value: " & doubleValue)
앞의 예제의 출력은 10진수 값 전체 정밀도를 유지하는 반면 Double 값Double
데이터 형식의 제한으로 인해 정밀도가 손실되었음을 보여 줍니다.
Decimal value: 1234567890123456789012345
Double value: 1.23456789012346E+24
후행 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 구조체입니다.
범위
D
변수 또는 상수에 큰 값을 할당하려면 Decimal
형식 문자를 사용해야 할 수 있습니다. 이 요구 사항은 다음 예제와 같이 리터럴 형식 문자가 리터럴을 따르지 않는 한 컴파일러가 리터럴을 Long
으로 해석하기 때문입니다.
Dim bigDec1 As Decimal = 9223372036854775807 ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808 ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow.
bigDec1
에 대한 선언은 할당된 값이 Long
에 대한 범위 내에 속하기 때문에 오버플로를 생성하지 않습니다.
Long
변수에 Decimal
값을 할당할 수 있습니다.
bigDec2
에 대한 선언은 할당된 값이 Long
에 대해 너무 커서 오버플로 오류를 생성합니다. 숫자 리터럴은 먼저 Long
으로 해석될 수 없으므로 Decimal
변수에 할당할 수 없습니다.
bigDec3
의 경우 리터럴 형식 문자 D
는 컴파일러가 리터럴을 Decimal
대신 Long
로 해석하도록 강제하여 문제를 해결합니다.
참고 항목
.NET