# Decimal 구조체

## 정의

10진수 부동 소수점 숫자를 나타냅니다.

``public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, IFormattable``
``public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, IFormattable, System::Runtime::Serialization::IDeserializationCallback, System::Runtime::Serialization::ISerializable``
``public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, ISpanFormattable, System::Runtime::Serialization::IDeserializationCallback, System::Runtime::Serialization::ISerializable``
``public value class System::Decimal : IComparable, IComparable<System::Decimal>, IConvertible, IEquatable<System::Decimal>, IFormattable, System::Runtime::Serialization::IDeserializationCallback``
``public value class System::Decimal : IComparable, IConvertible, IFormattable``
``public value class System::Decimal : IComparable, IComparable<System::Decimal>, IEquatable<System::Decimal>, IFormattable``
``public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable``
``public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable``
``public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, ISpanFormattable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable``
``public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable, System.Runtime.Serialization.IDeserializationCallback``
``````[System.Serializable]
public struct Decimal : IComparable, IConvertible, IFormattable``````
``````[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable``````
``````[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Decimal : IComparable, IComparable<decimal>, IConvertible, IEquatable<decimal>, IFormattable, System.Runtime.Serialization.IDeserializationCallback``````
``public struct Decimal : IComparable, IComparable<decimal>, IEquatable<decimal>, IFormattable``
``````type decimal = struct
interface IConvertible
interface IFormattable``````
``````type decimal = struct
interface IConvertible
interface IFormattable
interface IDeserializationCallback
interface ISerializable``````
``````type decimal = struct
interface IConvertible
interface ISpanFormattable
interface IFormattable
interface IDeserializationCallback
interface ISerializable``````
``````type decimal = struct
interface IConvertible
interface IFormattable
interface IDeserializationCallback``````
``````[<System.Serializable>]
type decimal = struct
interface IFormattable
interface IConvertible``````
``````[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type decimal = struct
interface IFormattable
interface IConvertible``````
``````[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type decimal = struct
interface IFormattable
interface IConvertible
interface IDeserializationCallback``````
``````type decimal = struct
interface IFormattable``````
``````Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IEquatable(Of Decimal), IFormattable``````
``````Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IDeserializationCallback, IEquatable(Of Decimal), IFormattable, ISerializable``````
``````Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IDeserializationCallback, IEquatable(Of Decimal), ISerializable, ISpanFormattable``````
``````Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IConvertible, IDeserializationCallback, IEquatable(Of Decimal), IFormattable``````
``````Public Structure Decimal
Implements IComparable, IConvertible, IFormattable``````
``````Public Structure Decimal
Implements IComparable, IComparable(Of Decimal), IEquatable(Of Decimal), IFormattable``````
상속
Decimal
특성
구현

## 예제

다음 코드 예제에서는 Decimal의 사용법을 보여줍니다.

``````   /// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
public ref class PiggyBank
{
protected:
Decimal MyFortune;

public:
void AddPenny()
{
MyFortune = System::Decimal::Add( MyFortune, Decimal(.01) );
}

System::Decimal Capacity()
{
return MyFortune.MaxValue;
}

Decimal Dollars()
{
return Decimal::Floor( MyFortune );
}

Decimal Cents()
{
return Decimal::Subtract( MyFortune, Decimal::Floor( MyFortune ) );
}

virtual System::String^ ToString() override
{
return MyFortune.ToString("C")+" in piggy bank";
}
};
}
``````
``````/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank {
protected decimal MyFortune;

public void AddPenny() {
MyFortune = Decimal.Add(MyFortune, .01m);
}

public decimal Capacity {
get {
return Decimal.MaxValue;
}
}

public decimal Dollars {
get {
return Decimal.Floor(MyFortune);
}
}

public decimal Cents {
get {
return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
}
}

public override string ToString() {
return MyFortune.ToString("C")+" in piggy bank";
}
}
``````
``````' Keeping my fortune in Decimals to avoid the round-off errors.
Class PiggyBank
Protected MyFortune As Decimal

Public Sub AddPenny()
MyFortune = [Decimal].Add(MyFortune, 0.01D)
End Sub

Public ReadOnly Property Capacity() As Decimal
Get
Return [Decimal].MaxValue
End Get
End Property

Public ReadOnly Property Dollars() As Decimal
Get
Return [Decimal].Floor(MyFortune)
End Get
End Property

Public ReadOnly Property Cents() As Decimal
Get
Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
End Get
End Property

Public Overrides Function ToString() As String
Return MyFortune.ToString("C") + " in piggy bank"
End Function
End Class
``````

## 설명

Decimal값 형식은 양수 79,228,162,514,264,337,593,543,950 범위의 10진수를 나타냅니다. ,335에서 음수 79,228,162,514,264,337,593,543,950,335. 의 `Decimal` 기본값은 0입니다. Decimal값 형식은 많은 수의 중요한 제수와 소수 자릿수가 필요하고 반올림 오류가 없는 재무 계산에 적합합니다. Decimal형식을 사용하면 반올림할 필요가 없습니다. 오히려 반올림으로 인한 오류를 최소화합니다. 예를 들어 다음 코드는 1 대신 0.9999999999999999999999999999의 결과를 생성합니다.

``````using namespace System;

void main()
{
Decimal dividend = Decimal::One;
Decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console::WriteLine(dividend/divisor * divisor);
}
``````
``````decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);
``````
``````Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor)
``````

나누기 및 곱하기의 결과가 메서드에 전달되면 Round 다음 코드와 같이 정밀도가 손실되지 않습니다.

``````using namespace System;

void main()
{
Decimal dividend = Decimal::One;
Decimal divisor = 3;
// The following displays 1.00 to the console
Console::WriteLine(Math::Round(dividend/divisor * divisor, 2));
}
``````
``````decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2));
``````
``````Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2))
``````

10진수는 부호, 값의 각 숫자가 0에서 9 사이인 숫자 값, 숫자 값의 정수 부분과 소수 부분을 구분하는 부동 소수점 위치를 나타내는 배율로 구성된 부동 소수점 값입니다.

값의 이진 `Decimal` 표현은 96비트 정수로 구성된 128비트 및 소수 부분을 지정하는 데 사용되는 부호 및 배율 비율과 같은 것을 나타내는 32비트 플래그 집합입니다. 따라서 Decimal (-296 ~ 2 96 ) / 10 (0에서28)) 형식 값의 이진 표현입니다. 여기서 -(296-1)은 와 MinValue 같고 296-1은 와 MaxValue 같습니다. 값의 이진 표현 및 예제에 대 한 자세한 내용은 Decimal 참조는 Decimal(Int32[]) 생성자 및 GetBits 메서드.

또한 배율 계수는 숫자의 후행 0을 Decimal 유지합니다. 후행 0은 Decimal 산술 또는 비교 연산의 숫자 값에 영향을 미치지 않습니다. 그러나 적절한 형식 문자열이 적용되는 경우 메서드에서 후행 0을 표시할 수 ToString 있습니다.

### 변환 고려 사항

이 형식은 값을 , 및 값으로 변환하는 메서드를 Decimal SByte Int16 Int32 Int64 Byte UInt16 UInt32 UInt64 제공합니다. 이러한 정수 형식에서 로의 Decimal 변환은 정보를 손실하거나 예외를 throw하지 않는 확대 변환입니다.

에서 Decimal 정수 형식으로 변환하는 경우 Decimal 값을 0으로 가장 가까운 정수 값으로 반올림하는 축소 변환이 있습니다. C#과 같은 일부 언어는 Decimal 값을 값으로 변환하는 것도 Char 지원합니다. 이러한 변환의 결과를 대상 형식으로 나타낼 수 없는 경우 OverflowException 예외가 throw됩니다.

Decimal형식은 값을 및 Decimal 값으로 변환하는 메서드도 Single Double 제공합니다. 에서 Decimal 또는 로의 Single Double 변환은 전체 자릿수가 손실될 수 있지만 변환된 값의 크기에 대한 정보는 손실되지 않는 축소 변환입니다. 변환은 예외를 throw하지 않습니다.

변환 결과를 로 나타낼 수 없는 경우 또는 에서 Single Double Decimal OverflowException 변환하여 예외를 Decimal throw합니다.

### 10진수 값에 대한 작업 수행

Decimal형식은 더하기, 빼기, 나누기, 곱하기 및 부정과 같은 표준 수학 연산을 지원합니다. 메서드를 호출하여 값의 이진 표현으로 직접 작업할 수도 Decimal GetBits 있습니다.

두 값을 비교하려면 Decimal 표준 숫자 비교 연산자를 사용하거나 또는 메서드를 호출할 수 CompareTo Equals 있습니다.

클래스의 멤버를 Math 호출하여 숫자의 절대값 얻기, 두 값의 최대값 또는 최소값 확인, 숫자 부호 얻기, 숫자 반올림 등 다양한 숫자 연산을 수행할 수도 Decimal 있습니다.

## 생성자

 Decimal의 새 인스턴스를 지정된 배정밀도 부동 소수점 숫자의 값으로 초기화합니다. Decimal의 새 인스턴스를 지정된 32비트 부호 있는 정수 값으로 초기화합니다. 인스턴스의 구성 부분을 지정하는 매개 변수에서 Decimal의 새 인스턴스를 초기화합니다. Decimal의 새 인스턴스를 이진으로 표현되며 지정한 배열에 포함된 10진 값으로 초기화합니다. Decimal의 새 인스턴스를 지정된 64비트 부호 있는 정수 값으로 초기화합니다. Decimal의 새 인스턴스를 이진으로 표현되고 지정된 범위에 포함된 10진수 값으로 초기화합니다. Decimal의 새 인스턴스를 지정된 단정밀도 부동 소수점 숫자의 값으로 초기화합니다. Decimal의 새 인스턴스를 지정된 32비트 부호 없는 정수 값으로 초기화합니다. Decimal의 새 인스턴스를 지정된 64비트 부호 없는 정수 값으로 초기화합니다.

## 필드

 Decimal의 가능한 최대값을 나타냅니다. 이 필드는 상수이며 읽기 전용입니다. 음수 1(-1)을 나타냅니다. Decimal의 가능한 최소값을 나타냅니다. 이 필드는 상수이며 읽기 전용입니다. 숫자 1을 나타냅니다. 숫자 0을 나타냅니다.

## 메서드

 지정된 두 Decimal 값을 더합니다. 지정된 10진수보다 크거나 같은 최소 정수 값을 반환합니다. 지정된 두 Decimal 값을 비교합니다. 이 인스턴스를 지정된 Decimal 개체와 비교하여 상대 값의 비교를 반환합니다. 이 인스턴스를 지정된 개체와 비교하여 상대 값의 비교를 반환합니다. 지정된 두 Decimal 값을 나눕니다. 이 인스턴스의 값과 지정된 Decimal 개체의 값이 같은지를 나타내는 값을 반환합니다. 지정된 두 개의 Decimal 인스턴스가 같은 값을 표시하는지 여부를 나타내는 값을 반환합니다. 이 인스턴스와 지정된 Object가 같은 형식과 값을 표시하는지 여부를 나타내는 값을 반환합니다. 지정된 Decimal 수를 음의 무한대에 가장 가까운 정수로 반올림합니다. OLE Automation Currency 값을 포함하는 지정된 64비트 부호 있는 정수를 해당하는 Decimal 값으로 변환합니다. Decimal의 지정된 인스턴스 값을 해당하는 이진 표현으로 변환합니다. Decimal의 지정된 인스턴스 값을 해당하는 이진 표현으로 변환합니다. 이 인스턴스의 해시 코드를 반환합니다. TypeCode 값 형식에 대한 Decimal를 반환합니다. 지정된 두 Decimal 값을 곱합니다. 지정된 Decimal 값과 음수 1을 곱한 결과를 반환합니다. 지정된 스타일 및 문화권별 지정 형식을 사용하여 숫자의 범위 표현을 해당하는 Decimal로 변환합니다. 숫자의 문자열 표현을 해당하는 Decimal로 변환합니다. 지정된 문화권별 형식 정보를 사용하여 숫자의 문자열 표현을 해당 Decimal로 변환합니다. 숫자를 지정된 스타일로 나타낸 문자열 표현을 해당 Decimal로 변환합니다. 지정된 스타일 및 문화권별 형식을 사용하여 숫자의 문자열 표현을 해당하는 Decimal로 변환합니다. 두 Decimal 값을 나눈 나머지를 계산합니다. 10진 값을 가장 가까운 정수로 반올림합니다. Decimal 값을 지정된 소수 자릿수로 반올림합니다. 지정된 반올림 전략을 사용하여 10진수 값을 지정된 전체 자릿수로 반올림합니다. 지정된 반올림 전략을 사용하여 10진수 값을 정수로 반올림합니다. 다른 값에서 지정된 Decimal 값을 뺍니다. 지정된 Decimal의 값을 해당하는 8비트 부호 없는 정수로 변환합니다. 지정된 Decimal의 값을 해당하는 배정밀도 부동 소수점 숫자로 변환합니다. 지정된 Decimal의 값을 해당하는 16비트 부호 있는 정수로 변환합니다. 지정된 Decimal의 값을 해당하는 32비트 부호 있는 정수로 변환합니다. 지정된 Decimal의 값을 해당하는 64비트 부호 있는 정수로 변환합니다. 지정된 Decimal 값을 64비트 부호 있는 정수에 포함된 해당 OLE Automation Currency 값으로 변환합니다. 지정된 Decimal의 값을 해당하는 8비트 부호 있는 정수로 변환합니다. 지정된 Decimal의 값을 해당하는 단정밀도 부동 소수점 숫자로 변환합니다. 이 인스턴스의 숫자 값을 해당하는 문자열 표현으로 변환합니다. 지정된 문화권별 형식 정보를 사용하여 이 인스턴스의 숫자 값을 해당 문자열 표현으로 변환합니다. 지정된 형식을 사용하여 이 인스턴스의 숫자 값을 해당 문자열 표현으로 변환합니다. 지정된 형식 및 문화권별 형식 정보를 사용하여 이 인스턴스의 숫자 값을 해당 문자열 표현으로 변환합니다. 지정된 Decimal의 값을 해당하는 16비트 부호 없는 정수로 변환합니다. 지정된 Decimal의 값을 해당하는 32비트 부호 없는 정수로 변환합니다. 지정된 Decimal의 값을 해당하는 64비트 부호 없는 정수로 변환합니다. 소수 자리를 삭제하고 지정된 Decimal의 정수 자리만 반환합니다. 현재의 10진수 인스턴스 값을 제공된 문자 범위의 형식으로 지정하려고 시도합니다. Decimal의 지정된 인스턴스 값을 동일한 이진 표현으로 변환합니다. 지정된 스타일 및 문화권별 지정 형식을 사용하여 숫자의 범위 표현을 해당하는 Decimal로 변환합니다. 반환 값은 변환이 성공했는지 아니면 실패했는지를 나타냅니다. 지정된 스타일 및 문화권별 지정 형식을 사용하여 숫자의 범위 표현을 해당하는 Decimal로 변환합니다. 반환 값은 변환이 성공했는지 아니면 실패했는지를 나타냅니다. 숫자의 문자열 표현을 해당하는 Decimal로 변환합니다. 반환 값은 변환이 성공했는지 아니면 실패했는지를 나타냅니다. 지정된 스타일 및 문화권별 형식을 사용하여 숫자의 문자열 표현을 해당하는 Decimal로 변환합니다. 반환 값은 변환이 성공했는지 아니면 실패했는지를 나타냅니다.

## 연산자

 지정된 두 Decimal 값을 더합니다. Decimal 피연산자를 1씩 감소시킵니다. 지정된 두 Decimal 값을 나눕니다. 두 Decimal 값이 같은지 여부를 나타내는 값을 반환합니다. Decimal을 8비트 부호 없는 정수로 변환하는 명시적 변환을 정의합니다. Decimal을 유니코드 문자로 변환하는 명시적 변환을 정의합니다. Decimal을 배정밀도 부동 소수점 숫자로 변환하는 명시적 변환을 정의합니다. Decimal을 16비트 부호 있는 정수로 변환하는 명시적 변환을 정의합니다. Decimal을 32비트 부호 있는 정수로 변환하는 명시적 변환을 정의합니다. Decimal을 64비트 부호 있는 정수로 변환하는 명시적 변환을 정의합니다. Decimal을 8비트 부호 있는 정수로 변환하는 명시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. Decimal을 단정밀도 부동 소수점 숫자로 변환하는 명시적 변환을 정의합니다. Decimal을 16비트 부호 없는 정수로 변환하는 명시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. Decimal을 32비트 부호 없는 정수로 변환하는 명시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. Decimal을 64비트 부호 없는 정수로 변환하는 명시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. 배정밀도 부동 소수점 숫자를 Decimal로 변환하는 명시적 변환을 정의합니다. 단정밀도 부동 소수점 숫자를 Decimal로 변환하는 명시적 변환을 정의합니다. 지정된 Decimal이 지정된 다른 Decimal보다 큰지 여부를 나타내는 값을 반환합니다. 지정된 Decimal이 지정된 다른 Decimal보다 크거나 같은지 여부를 나타내는 값을 반환합니다. 8비트 부호 없는 정수를 Decimal로 변환하는 명시적 변환을 정의합니다. 유니코드 문자를 Decimal로 변환하는 암시적 변환을 정의합니다. 16비트 부호 있는 정수를 Decimal로 변환하는 암시적 변환을 정의합니다. 32비트 부호 있는 정수를 Decimal로 변환하는 암시적 변환을 정의합니다. 64비트 부호 있는 정수를 Decimal로 변환하는 암시적 변환을 정의합니다. 부호 있는 8비트 정수를 Decimal 값으로 변환하는 암시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. 부호 없는 16비트 정수를 Decimal로 변환하는 암시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. 부호 없는 32비트 정수를 Decimal로 변환하는 암시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. 부호 없는 64비트 정수를 Decimal로 변환하는 암시적 변환을 정의합니다. 이 API는 CLS 규격이 아닙니다. Decimal 피연산자를 1씩 증가시킵니다. 두 Decimal 개체의 값이 다른지 여부를 나타내는 값을 반환합니다. 지정된 Decimal이 지정된 다른 Decimal보다 작은지 여부를 나타내는 값을 반환합니다. 지정된 Decimal이 지정된 다른 Decimal보다 작거나 같은지 여부를 나타내는 값을 반환합니다. 지정된 두 Decimal 값을 나눈 나머지를 반환합니다. 지정된 두 Decimal 값을 곱합니다. 지정된 두 Decimal 값을 뺍니다. 지정된 Decimal 피연산자 값의 부정입니다. Decimal 피연산자의 값을 반환합니다(피연산자의 부호는 변경되지 않음).

## 명시적 인터페이스 구현

 현재 인스턴스와 동일한 형식의 다른 개체를 비교하고 정렬 순서에서 현재 인스턴스의 위치가 다른 개체보다 앞인지, 뒤인지 또는 동일한지를 나타내는 정수를 반환합니다. 이 인스턴스에 대한 TypeCode를 반환합니다. 이 멤버에 대한 설명은 ToBoolean(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToByte(IFormatProvider)를 참조하세요. 이 변환은 지원되지 않습니다. 이 메서드를 사용하려고 하면 InvalidCastException이 throw됩니다. 이 변환은 지원되지 않습니다. 이 메서드를 사용하려고 하면 InvalidCastException이 throw됩니다. 이 멤버에 대한 설명은 ToDecimal(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToDouble(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToInt16(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToInt32(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToInt64(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToSByte(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToSingle(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToType(Type, IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToUInt16(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToInt32(IFormatProvider)를 참조하세요. 이 멤버에 대한 설명은 ToInt64(IFormatProvider)를 참조하세요. 개체의 deserialization이 완료될 때 실행됩니다. 대상 개체를 직렬화하는 데 필요한 데이터로 SerializationInfo를 채웁니다.

## 스레드 보안

이 형식의 모든 멤버는 스레드 안전 합니다. 인스턴스 상태를 수정하는 것처럼 보이는 멤버는 실제로 새 값으로 초기화된 새 인스턴스를 반환합니다. 다른 형식과 마찬가지로 이 형식의 인스턴스를 포함하는 공유 변수에 대한 읽기 및 쓰기는 스레드 안전을 보장하기 위해 잠금으로 보호되어야 합니다.