Decimal 구조체

업데이트: 2007년 11월

10진수를 나타냅니다.

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct 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 값 형식은 유효한 정수 및 소수로 이루어지며 반올림 오차가 없는 수가 많이 사용되는 회계 계산에 적합합니다. Decimal 형식을 사용해도 반올림의 필요성이 사라지는 것은 아닙니다. 하지만 이 형식을 사용하면 반올림으로 인한 오차를 최소화할 수 있습니다. 예를 들어 다음 코드에서는 결과로 1 대신 0.9999999999999999999999999999가 생성됩니다.

decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);   


나누기 및 곱하기의 결과를 Round 메서드로 전달할 때 다음 코드에서 볼 수 있는 것처럼 정밀도 손실이 발생하지 않습니다.

decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2));   


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

Decimal에서 이러한 정수 형식 중 하나로 변환하는 것은 Decimal 값을 0에서 가장 가까운 정수로 반올림하는 한정된 변환에 해당합니다. 또한 C#과 같은 일부 언어에서는 Decimal 값을 Char 값으로 변환할 수 있습니다. 이러한 변환의 결과를 대상 형식으로 표현할 수 없으면 OverflowException이 throw됩니다.

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

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

구현된 인터페이스

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

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

	/// <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>
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";
		}
	}


이 형식의 모든 멤버는 스레드로부터 안전합니다. 인스턴스 상태를 수정하는 것처럼 보이는 멤버의 경우 실제로는 새 값으로 초기화되는 새 인스턴스를 반환합니다. 다른 모든 형식과 마찬가지로 이 형식의 인스턴스를 포함하는 공유 변수를 읽고 쓰는 작업은 스레드로부터 안전하도록 잠가서 보호해야 합니다.

1k2e8atx.alert_caution(ko-kr,VS.90).gif주의:

이 형식의 인스턴스를 할당하는 경우 해당 인스턴스의 이진 표현이 너무 커서 단일 원자 연산에 할당되지 못할 수 있으므로 모든 하드웨어 플랫폼에서 스레드로부터 안전하지 않습니다.

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

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Compact Framework

3.5, 2.0, 1.0에서 지원

XNA Framework

2.0, 1.0에서 지원
이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft