2013-03-11 4 views
3

VB 또는 C#의 "decimal"값의 내부 형식은 무엇입니까?vb/C# 10 진수 내부 형식

나는이 일이 내가 즉시하고있는 일과 관련이 있는지 알지 못한다. 그러나 그것은 알아두면 좋은 것들 중 하나이다. 마찬가지로, 얼마나 많은 비트와 음수가 저장되어 있는지 알면 양수가 예상되는 위치에 음수가 나타날 때 깊은 어둠의 신비에 당황하는 대신 "아, 오버플로가있었습니다"라고 즉시 생각할 수 있습니다. .

+1

http://stackoverflow.com/questions/618535/what-is-the-difference-between-decimal-float-and-double-in-c 또는 더 나은 http://csharpindepth.com/Articles /General/Decimal.aspx –

답변

7

귀하의 질문에 대한 대답은 documentation에 의해 전체 선명으로 제공됩니다

진수 값 유형은 긍정적 79,228,162,514,264,337,593,543,950,335 부정적인 79,228,162,514,264,337,593,543,950,335에 이르기까지 진수를 나타냅니다. 십진 값 형식은 큰 숫자와 소수점 자릿수 및 반올림 오류가 필요하지 않은 재무 계산에 적합한 입니다. Decimal 형식으로 반올림하지 않아도됩니다. 오히려 반올림으로 인한 오류를 최소화하기 위해 입니다.

10 진수 부동 소수점 의 위치를 ​​나타내는 기호로 구성되는 부동 소수점 값의 값에서 각 숫자는 0 내지 9 범위의 수치 및 스케일링 인자 숫자 값의 정수 부분과 분수 부분을 구분합니다. 96 비트 정수 번호 및 96 비트 정수를 분할하고, 소수이고 그것의 어떤 부분을 지정하는 데 사용되는 스케일링 인자 진수 값의 이진 표현은 1 비트의 부호로 구성

, . 스케일링 인자 암시 따라서 0 내지 28 범위의 지수 로 상승 수가 10이고하는 십진 값의 이진 표현 형태이며, ((-2 9696 2)/(--1이 MinValue와 같고,-1이 MaxValue와 동일한 경우, 1(0 내지 28))이된다. Decimal 값의 이진 표현 및 예제에 대한 자세한 내용은 Decimal(Int32[]) 생성자 및 GetBits 메서드를 참조하십시오.

또한 배율 인수는 십진수 숫자의 모든 후행 0을 유지합니다. 후행 0은 산술 또는 비교 연산의 10 진수 값에 영향을주지 않습니다. 그러나 적절한 형식 문자열이 인 경우 ToString 메서드에 의해 표시된 후행 0은 이 될 수 있습니다.

이진 표현 GetBits의 설명서에 기재된 바와 같이 :

진수의 이진 표현은 1 비트 기호 구성

, 96 비트 정수, 및 정수를 나눗셈하는 데 사용되는 스케일 인수로 소수 부분을 지정합니다. 스케일링 인수는 암시 적으로 숫자 10이며 지수가 이고 범위는 0에서 28입니다.

반환 값은 32 비트 부호있는 정수의 네 요소로 구성된 배열입니다.

반환되는 배열의 첫 번째, 두 번째 및 세 번째 요소에는 의 96 비트 정수 중 32 비트가 포함됩니다.

반환되는 배열의 네 번째 요소에는 배율 인수와 부호가 포함됩니다. 다음 파트로 구성됩니다.

비트 0-15는 사용되지 않으므로 0이어야합니다.

비트 16 ~ 23은 0 ~ 28 사이의 지수를 포함해야하며, 은 정수를 나눌 10의 지수를 나타냅니다.

비트 24-30은 사용되지 않으므로 0이어야합니다.

비트 31에는 부호가 포함되어 있습니다. 0은 양수를 의미하고 1은 음수를 나타냅니다.

비트 표현은 음수와 양수 0을 구별합니다. 이 값은 모든 작업에서 동일하게 취급됩니다.

+0

감사합니다. 나는 System.decimal을 보지 않을 것이라고 생각했는데 표준 데이터 유형 목록을보고 범위에 대해서는 이야기했지만 형식에 대해서는 언급하지 않았습니다. 좋습니다, 어쩌면 저것은보기에 명백한 곳이었을 것입니다. 그리고 나는 두뇌가 멈추었습니다. – Jay

1

모두 C# 및 VB.NET decimal 문서화가 잘되어, System.Decimal 지칭 : System.Decimal

decimal (C# Reference)

진수 키워드는 128 비트의 데이터 타입을 나타낸다. 부동 소수점 유형과 비교할 때 십진 유형은 더 높은 정밀도와 범위를 가지므로 재정 및 통화 계산에 적합합니다. 십진 유형 의 대략적인 범위와 정밀도는 다음 표에 나와 있습니다.

범위 : ± 1.0 × 10-28 7.9 × 1,028 정밀도, ± : 28-29 유효 숫자

Decimal Data Type (Visual Basic)

를 나타내는 128 비트 (16 바이트) 값을 서명 보존 조치 96 비트 (12 바이트) 가변 수 10으로 스케일 된 정수. 스케일링 인수 은 소수점 오른쪽의 자릿수를 지정합니다. 의 범위는 0에서 28까지입니다. 소수점 이하 자릿수가 0 인 경우 은 +/- 79,228,162,514,264,337,593,543,950,335 (+/- 7.9228162514264337593543950335E + 28)입니다. 소수 자릿수 28자를 사용하면 최대 값은 +/- 7.9228162514264337593543950335이고 가장 작은 값은 0이 아닌 값은 +/- 0.0000000000000000000000000001 (+/- 1E-28)입니다.