다음을 통해 공유


Decimal 구조체

10진수를 나타냅니다.

네임스페이스: System
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Decimal
    Implements IFormattable, IComparable, IConvertible, IComparable(Of Decimal), _
    IEquatable(Of Decimal)
‘사용 방법
Dim instance As Decimal
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public struct Decimal : IFormattable, IComparable, IConvertible, 
    IComparable<decimal>, IEquatable<decimal>
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public value class Decimal : IFormattable, IComparable, IConvertible, 
    IComparable<Decimal>, IEquatable<Decimal>
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class Decimal extends ValueType implements IFormattable, IComparable, 
    IConvertible, IComparable<Decimal>, IEquatable<Decimal>
JScript에서는 구조체를 사용할 수 있지만 새로 선언할 수는 없습니다.

설명

Decimal 값 형식은 양수 79,228,162,514,264,337,593,543,950,335부터 음수 79,228,162,514,264,337,593,543,950,335 범위의 10진수를 나타냅니다. Decimal 값 형식은 유효한 정수 및 소수로 이루어지며 반올림 오차가 없는 수가 많이 사용되는 회계 계산에 적합합니다.

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

Decimal 값의 이진 표현은 부호 1비트, 96비트 정수 및 96비트 정수를 나누어 십진 부분을 지정하는 데 사용되는 소수 자릿수 인수로 구성됩니다. 소수 자릿수 인수는 암시적으로 숫자 10이며 지수는 0에서 28까지입니다. 따라서, Decimal 값의 이진 표현은 ((-296에서 296) / 10(0에서 28))의 형식입니다. 여기서 -296-1은 MinValue와 같고 296-1은 MaxValue와 같습니다.

소수 자릿수 인수는 Decimal 숫자의 후행 0도 모두 보존합니다. 후행 0은 산술 연산이나 비교 연산에서 Decimal 숫자의 값에 영향을 미치지 않습니다. 그러나 적절한 형식 문자열이 적용되는 경우 ToString 메서드에 의해 후행 0이 표시될 수 있습니다.

변환 고려 사항

이 형식은 Decimal 값을 Char, SByte, Int16, Int32, Int64, Byte, UInt16, UInt32UInt64 형식으로 또는 반대로 변환하는 메서드를 제공합니다. 다른 형식을 Decimal로 또는 반대로 변환하는 것은 정보를 잃거나 예외를 throw시키지 않는 확장된 변환에 해당합니다.

Decimal에서 다른 형식으로 또는 반대로 변환하는 것은 Decimal 값을 0에서 가장 가까운 정수로 반올림하는 한정된 변환에 해당합니다. 변환의 결과를 대상 형식으로 표현할 수 없으면 OverflowException이 throw됩니다.

이 형식은 Decimal 값을 SingleDouble로 또는 반대로 변환하는 메서드를 제공합니다. Decimal에서 Single 또는 Double로 또는 반대로 변환하는 것은 정밀도를 떨어뜨릴 뿐 아니라 변환된 값의 크기에 대한 정보가 손실되는 한정된 변환에 해당합니다. 이러한 변환은 예외를 throw하지 않습니다.

Single 또는 DoubleDecimal로 또는 반대로 변환할 때 변환의 결과를 Decimal로 표현할 수 없으면 OverflowException이 throw됩니다.

구현된 인터페이스

이 형식은 IComparable, IComparable, IFormattableIConvertible 인터페이스를 구현합니다. 변환을 위해 이 형식의 IConvertible 명시적 인터페이스 멤버 구현 대신 Convert 클래스를 사용합니다.

예제

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

' 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
/// <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";
    }
}
   /// <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 System.Decimal myFortune;

    public void AddPenny()
    {
        myFortune = Decimal.Add(myFortune, System.Convert.ToDecimal(0.01));
    } //AddPenny

    /** @property 
     */
    public System.Decimal get_Capacity()
    {
        return Decimal.MaxValue;
    } //get_Capacity

    /** @property 
     */
    public System.Decimal get_Dollars()
    {
        return Decimal.Floor(myFortune);
    } //get_Dollars

    /** @property 
     */
    public System.Decimal get_Cents()
    {
        return Decimal.Subtract(myFortune, Decimal.Floor(myFortune));
    } //get_Cents

    public String ToString()
    {
        return myFortune.ToString("C") + " in piggy bank";
    } //ToString
} //PiggyBank
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank {
    protected var MyFortune : Decimal;

    public function AddPenny() {
        MyFortune = Decimal.Add(MyFortune, 0.01);
    }

    public function get Capacity() : Decimal {
            return Decimal.MaxValue;
    }

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

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

    public function ToString() : String {
        return MyFortune.ToString("C")+" in piggy bank";
    }
}

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

Decimal 멤버
System 네임스페이스
SByte
Int16
Int32
Int64
Byte 구조체
UInt16
UInt32
UInt64
Single
Double
Char 구조체