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